{"version":3,"sources":["Global.js","globals/Constants.js","globals/Icons.js","contextmenu.js","api/WebAccess/ControlsTemplates.js","api/WebAccess/BaseObject.js","api/WebAccess/BaseReactObject.js","api/WebAccess/models/BaseObjectModel.js","api/WebAccess/models/DocumentModel.js","api/WebAccess/models/TaskModel.js","api/WebAccess/models/JobModel.js","api/WebAccess/models/ReferenceRecordModel.js","api/WebAccess/models/FolderModel.js","api/WebAccess/models/WizardModel.js","api/WebAccess/Extension.js","api/WebAccess/WebAccess.js","api/WebAccess/mixins/pluginMixin.js","api/WebAccess/mixins/formMixin.js","api/WebAccess/Plugin.js","pages-main.js","links.js","LocalCopies.js","proxy.js","components.js","ReferenceSelect.js","ReferenceSelectDataProvider.js","PickRequisite.js","UserList.js","KeepAlive.js","api/WebAccess/current/User.js","api/WebAccess/Collection.js","api/WebAccess/mixins/linkMixin.js","api/WebAccess/Link.js","api/WebAccess/URL.js","api/WebAccess/utils/utils.js","api/WebAccess/cache/cache.js","api/WebAccess/utils/log/log.js","api/WebAccess/history/history.js","api/WebAccess/cache/sessionCache.js","api/WebAccess/cache/serverCache.js","api/WebAccess/services/services.js","api/WebAccess/templates/templates.js","api/WebAccess/services/authenticaion/authenticaion.js","api/WebAccess/services/base/profile.js","api/WebAccess/services/cardform/cardform.js","api/WebAccess/services/cryptography/cryptography.js","api/WebAccess/services/document/document.js","api/WebAccess/services/domainobject/foldercontent.js","api/WebAccess/services/entity/entity.js","api/WebAccess/services/folder/folder.js","api/WebAccess/services/reference/reference.js","api/WebAccess/services/requisite/requisite.js","api/WebAccess/services/script/script.js","api/WebAccess/services/session/session.js","api/WebAccess/services/task/task.js","api/WebAccess/components/components.js","api/WebAccess/components/dataViews/BaseDataProvider.js","api/WebAccess/components/dataViews/gridPlugins/_controls/selectList/SelectListControl.js","api/WebAccess/components/dataViews/gridPlugins/_controls/selectList/DateValuesPlugin.js","api/WebAccess/components/dataViews/gridPlugins/_controls/selectList/SpecialValuesPlugin.js","api/WebAccess/components/dataViews/gridPlugins/_controls/DateControl.js","api/WebAccess/components/dataViews/gridPlugins/_editors/StringEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/TextEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/PickEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/DateEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/IntegerEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/FloatEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/BaseObjectSelectEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/ReferenceEditor.js","api/WebAccess/components/dataViews/gridPlugins/_editors/DocumentEditor.js","api/WebAccess/components/dataViews/gridPlugins/SortingPlugin.js","api/WebAccess/components/dataViews/gridPlugins/GroupingPlugin.js","api/WebAccess/components/dataViews/gridPlugins/FooterPlugin.js","api/WebAccess/components/dataViews/gridPlugins/CheckboxPlugin.js","api/WebAccess/components/dataViews/gridPlugins/ContextMenuPlugin.js","api/WebAccess/components/dataViews/gridPlugins/ColumnResizePlugin.js","api/WebAccess/components/dataViews/gridPlugins/FilteringPlugin.js","api/WebAccess/components/dataViews/gridPlugins/DetailsContextMenu.js","api/WebAccess/components/dataViews/gridPlugins/EditPlugin.js","api/WebAccess/components/dataViews/Grid.js","api/WebAccess/components/dialogs/BaseDialog.js","api/WebAccess/components/dialogs/BaseMultiSelect.js","api/WebAccess/components/dialogs/ReferenceGridDialog.js","api/WebAccess/components/dialogs/SortableMultiSelect.js","api/WebAccess/components/dialogs/SelectableMultiSelect.js","api/WebAccess/components/dialogs/MessageBox.js","api/WebAccess/components/dialogs/CreateDocument.js","api/WebAccess/components/dialogs/FormDialog.js","api/WebAccess/components/dialogs/FormDialogDataProvider.js","api/WebAccess/components/dialogs/ReportParamsDialog.js","api/WebAccess/components/dialogs/FloatDialog.js","api/WebAccess/components/menus/BaseContextMenu.js","api/WebAccess/components/menus/OnlyIconsContextMenu.js","api/WebAccess/components/forms/FormBuilder.js","api/WebAccess/components/forms/validators.js","api/WebAccess/components/forms/requisites/DocumentSelect.js","api/WebAccess/components/forms/requisites/MultiSelect.js","api/WebAccess/components/forms/requisites/Pick.js","api/WebAccess/components/forms/requisites/ReferenceSelect.js","api/WebAccess/components/wrappers/AbstractBasePageElement.js","api/WebAccess/components/wrappers/BaseReactPageElement.js","api/WebAccess/components/wrappers/BasePageElement.js","api/WebAccess/components/wrappers/toolBar/actions/toggleImportance.js","api/WebAccess/components/wrappers/toolBar/actions/task.js","api/WebAccess/components/wrappers/toolBar/ToolBarButton.js","api/WebAccess/components/wrappers/toolBar/ReactToolBarButton.js","api/WebAccess/components/wrappers/toolBar/ToolBarGroup.js","api/WebAccess/components/wrappers/toolBar/ReactToolBarGroup.js","api/WebAccess/components/wrappers/toolBar/Buttons.js","api/WebAccess/components/wrappers/toolBar/Groups.js","api/WebAccess/components/wrappers/sideBar/Tab.js","api/WebAccess/components/wrappers/sideBar/Tabs.js","api/WebAccess/components/wrappers/sideBar/_ExplorerTabs.js","api/WebAccess/components/wrappers/sideBar/SideBar.js","api/WebAccess/components/wrappers/sideBar/_ExplorerSideBar.js","api/WebAccess/components/wrappers/form/Link.js","api/WebAccess/components/wrappers/form/Button.js","api/WebAccess/components/wrappers/folderTree/FolderTree.js","api/WebAccess/components/notifications/InlineHint.js","api/WebAccess/components/notifications/ReactInlineHint.js","api/WebAccess/components/notifications/Spinner.js","api/WebAccess/mixins/requisitesMixin.js","api/WebAccess/components/wrappers/form/RequisiteCollection.js","api/WebAccess/components/wrappers/form/BaseTableLine.js","api/WebAccess/components/wrappers/form/TableRow.js","api/WebAccess/components/wrappers/form/TableColumn.js","api/WebAccess/components/wrappers/form/Table.js","api/WebAccess/components/wrappers/form/Form.js","api/WebAccess/components/wrappers/objectList/ListItem.js","api/WebAccess/components/wrappers/objectList/CustomWorkListItem.js","api/WebAccess/components/wrappers/objectList/ObjectList.js","api/WebAccess/components/wrappers/objectList/FolderList.js","api/WebAccess/components/wrappers/objectList/ObjectsTable.js","api/WebAccess/components/wrappers/requisites/BaseRequisite.js","api/WebAccess/components/wrappers/requisites/BaseObjectSelectRequisite.js","api/WebAccess/components/wrappers/requisites/Reference.js","api/WebAccess/components/wrappers/requisites/Document.js","api/WebAccess/components/wrappers/requisites/Text.js","api/WebAccess/components/wrappers/requisites/Date.js","api/WebAccess/components/wrappers/requisites/Pick.js","api/WebAccess/components/wrappers/requisites/Integer.js","api/WebAccess/components/wrappers/requisites/Radio.js","api/WebAccess/components/wrappers/requisites/CheckBox.js","api/WebAccess/components/wrappers/requisites/ObjectList.js","api/WebAccess/components/wrappers/requisites/_details/editModeMixin.js","api/WebAccess/components/wrappers/requisites/_details/BaseRequisite.js","api/WebAccess/components/wrappers/requisites/_details/Reference.js","api/WebAccess/components/wrappers/requisites/_details/Document.js","api/WebAccess/components/wrappers/requisites/_details/Text.js","api/WebAccess/components/wrappers/requisites/_details/Date.js","api/WebAccess/components/wrappers/requisites/_details/Pick.js","api/WebAccess/components/wrappers/requisites/_details/Integer.js","api/WebAccess/components/wrappers/details/Detail.js","api/WebAccess/components/wrappers/details/DetailsInitializer.js","api/WebAccess/components/notifications/Toast.js","api/WebAccess/components/wrappers/sideBar/_ExplorerTab.js","api/WebAccess/components/wrappers/toolBar/ReactToolBar.js","api/WebAccess/components/wrappers/toolBar/ToolBar.js","api/WebAccess/components/actionButton/ActionButton.js","api/WebAccess/components/cardTab/CardTab.js","api/WebAccess/components/cardTab/CardTabMainTab.js","api/WebAccess/components/cardTab/CardTabStateTab.js","api/WebAccess/components/createPanel/CreatePanel.js","api/WebAccess/components/dialogs/MassCreateDocument.js","api/WebAccess/components/header/Header.js","api/WebAccess/current/current.js","api/WebAccess/current/window/window.js","api/WebAccess/current/statistics/statistics.js","api/WebAccess/factories/factories.js","api/WebAccess/factories/BaseFactory.js","api/WebAccess/factories/references/references.js","api/WebAccess/factories/scripts/scripts.js","api/WebAccess/factories/reports/reports.js","api/WebAccess/factories/folders/folders.js","api/WebAccess/factories/tasks/tasks.js","api/WebAccess/factories/searches/searches.js","api/WebAccess/factories/jobs/jobs.js","api/WebAccess/factories/dialogs/dialogs.js","api/WebAccess/factories/eDocuments/eDocuments.js","api/WebAccess/isbuilder/constants.js","api/WebAccess/domainMethods/EntityMethods.js","api/WebAccess/domainMethods/VariantParameter.js","api/WebAccess/domainMethods/VariantParameterFactory.js","api/WebAccess/actions/actions.js","core/Core.js","pages.js","notifications.js","core/agent/agent.js","core/agent/RunWithAgentDialog.js","core/agent/WaitAgentRunDialog.js","core/header/header.js","core/header/actions/actions.js","core/sideBar/sideBar.js","core/toolBars/toolBars.js","core/toolBars/objectList/objectList.js","core/toolBars/main/main.js","core/toolBars/main/statuses.js","core/toolBars/main/currentPeriod.js","core/toolBars/reference/reference.js","core/toolBars/job/job.js","core/footer/footer.js","core/footer/agentNotStartedWidget.js","core/footer/openedDocumentsWidget.js","core/dropping.js","core/objectList/objectList.js","core/objectList/dragging.js","core/preview/preview.js","core/preview/data-type.js","core/preview/postprocessors/base-document-postprocessor.js","core/preview/postprocessors/excel-document-postprocessor.js","core/preview/postprocessors/image-document-postprocessor.js","core/preview/postprocessors/multipage-document-postprocessor.js","core/preview/postprocessors/word-document-postprocessor.js","core/preview/actions/base-actions.js","core/preview/actions/image-actions.js","core/preview/actions/multipage-actions.js","core/preview/actions/spreadsheet-actions.js","core/preview/actions/text-actions.js","core/preview/actions/word-document-actions.js","core/preview/settings/base-document-preview-settings.js","core/preview/settings/image-document-preview-settings.js","core/preview/settings/text-document-preview-settings.js","core/preview/toolbar/toolbar.js","core/preview/toolbar/toolbar-button/base-toolbar-button.js","core/preview/toolbar/toolbar-button/selectable-toolbar-button.js","core/preview/toolbar/toolbar-button/fit-to-toolbar-button.js","core/preview/toolbar/toolbar-control/toolbar-control.js","core/preview/toolbar/toolbar-control/pagination-toolbar-control.js","core/contextmenu/contextmenu.js","core/login/authentication.js","core/customWorks/customWorks.js","core/tasks/tasks.js","core/pages/pages.js","core/pages/login.js","core/pages/explorer.js","core/documents/documents.js","core/jobs/jobs.js","core/jobs/performResults.js","api/WebAccess/agent/agent.js","api/WebAccess/agent/updates/updates.js","api/WebAccess/agent/edms/edms.js","api/WebAccess/agent/notifications/notifications.js","api/WebAccess/agent/clipboard/clipboard.js","core/settings/settings.js","core/cards/cards.js","core/grid/grid.js","core/grid/reference/ReferenceDataSource.js","core/grid/reference/SelectListDataProvider.js","core/grid/reference/reference.js","core/grid/details/DetailsDataProvider.js","core/grid/details/details.js","core/grid/Filters.js","core/migration/migration.js","core/migration/localStorage.js","core/migration/templates.js","core/report/reportPage.js","core/requisites/requisites.js","core/requisites/baseSelectRequisite.js","core/requisites/documentSelectRequisite.js","core/requisites/documentSelectDataProvider.js","core/requisites/referenceRecordSelectRequisite.js","Task.js","Document.js","Folder.js","ToolBar.js","MultiselectModalWindow.js","CardFormLoader.js","ObjectHistory.js","core/clipboard.js","forms/signform.js","searches.js"],"names":["format","str","params","arguments","length","_params","_typeof","slice","call","s","key","replace","df","datepicker","$","formatDate","regional","currentCultureName","dateFormat","date","formatDateTime","time","removeZeroTime","undefined","timepicker","tf","formatParts","split","timeFormat","tmptime","ampm","indexOf","hours","getHours","minutes","getMinutes","seconds","getSeconds","hour12","leadzero","parseDate","window","ParseDateTime","getHash","reqType","m","h","i","charCodeAt","objectTypeToString","objectType","OBJECT_TYPE","EDOCUMENT","FOLDER","TASK","JOB","REFERENCE_RECORD","ANY","UNKNOWN","objectKindToObjectType","objectKind","WA","raise","toUpperCase","prototype","trunc","n","substr","radix","opt_is_async","R","data","Code","msg","chars","Math","SRV","callSync","done","res","d","generateUniqueID","len","CHARS","uuid","random","r","D","p","rx","exec","day","join","newSvg","setAttribute","newSvgUse","setAttributeNS","hide","parent","prevSvg","insertBefore","xmlns","xlink","replacingSvgs","svgs","el","getElementsByTagName","svgUse","firstChild","svgName","getAttribute","document","createElementNS","className","baseVal","appendChild","push","forEach","parentNode","removeChild","parseDateTime","inp","val","y","daysInMonth","separator","cultureName","russianLocale","trim","enLocale","Date","parseInt","culture","type","today","dmy","dateseparator","getFullYear","tmpDate","substring","getDate","tmpTime","splice","ParseTime","requisiteTypeToString","requisiteTypeFromString","String","this","switchLayout","string","map","q","w","e","t","u","o","[","]","a","f","g","j","l",";","'","z","x","c","v","b",".","/","`","_","ch","replaceAll","needle","replacement","RegExp","entityMap","unescapeHtml","&","<",">","\"","stripHtml","&","<",">",""","'","/","subjectString","toString","position","newStr","endsWith","Object","searchString","lastIndex","fromISBuilderToNormal","func","cloneFunction","reFn","isInBrackets","clone","getISBString","conf","constructor","apply","args","body","hasOwnProperty","hideAllPopups","fromISO","tz","L","UTC","superFunction","setUTCMinutes","getUTCMinutes","NaN","Function","override","MIN_SUPPORTS_WINDOW_WIDTH","MIN_SUPPORTS_WINDOW_HEIGHT","BUTTON","LARGE","SMALL","FORM_METHOD","POST","GET","ENCTYPE","MULTIPART","URLENCODED","LAST_REFERENCES","ALL","ONLY_USERS","USERS_AND_GROUPS","DIRECTION","ASC","NONE","DESC","TAB_TYPE","CARD","HISTORY","RIGHTS","VERSIONS","ROUTE_SCHEME","CUSTOM_WORK_STATE","TASK_CARD","JOB_CARD","COLUMN_TYPE","DATE","STRING","INTEGER","COMPONENT_TOKEN","REFERENCE","SCRIPT","REPORT","USER","WIZARD","USER_OR_GROUP","SEARCH","DIALOG","TASK_IMPORTANCE","LOW","NORMAL","HIGH","WORK_STATE","INIT","RUNNING","DONE","CONTROLLED","ABORTED","CONTINUED","REQUISITE_TYPE","EMPTY","FLOAT","PICK","TEXT","LARGE_INTEGER","DOCUMENT","OBJECT_LIST","ACTION_ENABLED_MODE","ENABLED_ALWAYS","DISABLED_ALWAYS","ENABLED_ON_BROWSE","ENABLED_ON_EDIT","DISABLED_ON_BROWSE_EMPTY","JOB_ACTION_ENABLED_WHEN","IS_ENABLED_ON_ATTACHMENT_SELECTED","IS_ENABLED_ON_ABORTED","IS_ENABLED_ON_DONE","IS_ENABLED_ON_RUNNING","CONTENTS_ACTION_ENABLED_MODE","ENABLED_IN_SELECTED_MODE","ENABLED_ONLY_FOR_SELECTED","ENABLED_WHEN_MULTISELECT","ORIENTATION","SIDEBAR_ORIENTATION","HORIZONTAL","VERTICAL","MODEL","FULL","CONTENT","LINK","WORK_ACCESS_TYPE","MANUAL","PARTICIPANTS","JOB_KIND","NOTICE","CONTROL_JOB","MESSAGE_TYPE","WARNING","ERROR","INFO","INLINE_HINT_PRIORITY","PRIMARY","SECONDARY","FOLDER_CONTENT_TYPE","SPEC_FOLDER_TYPE","FOLDER_TYPE","INBOX","OUTBOX","FAVORITES","COMMON_FOLDER","USER_FOLDER","SHORTCUTS","LOG_LEVEL","WARN","DEBUG","SERIALIZATION","LITE","DIALOG_ACTION","OK","CANCEL","REFERENCE_MODAL_MODE","VIEW","SINGLE","MULTI","VARIANT_TYPE","BOOLEAN","DATE_TIME","USER_GROUP","USER_ROLE","INTEGER_COLLECTION","SINGLE_COLLECTION","STRING_COLLECTION","BOOLEAN_COLLECTION","DATE_TIME_COLLECTION","TASK_COLLECTION","JOB_COLLECTION","FOLDER_COLLECTION","DOCUMENT_COLLECTION","REFERENCE_RECORD_COLLECTION","USER_COLLECTION","USER_GROUP_COLLECTION","USER_ROLE_COLLECTION","WIZARD_DOCUMENT_STEP_SHOW_MODE","BODY","TOKEN_OPERATION","DOWNLOAD_DOCUMENT_BODY","UPLOAD_DOCUMENT_BODY","UPDATE_AGENT","SIGN_DOCUMENT","SIGN_TASK","GET_NEW_JOB_LIST","LOCK_VERSION","UNLOCK_VERSION","GET_ENCRYPTION_KEY","DIAGNOSTICS","EXPLORER","MAX_OBJECT_ROWS_COUNT","PAGE_EVENTS","ON_BEFORE_TAB_CHANGE","TAB_MODEL_CHANGE","TAB_ON_BEFORE_RENDER_NEW_MODEL","TAB_ON_AFTER_RENDER_NEW_MODEL","TOGGLE_PERIOD","TOOLBAR_BUTTONS_INIT_DONE","TOOLBAR_GROUPS_INIT_DONE","MAIN_TAB_CONTENT_SAFE_LENGTH","STATISTICS","freeze","DEBOUNCE_INTERVAL","REQUEST_INTERVAL","STACK_SIZE","FOLDER_MODE","COVER","LIST","GRID","FOLDER_GRID","WIDTHS_STORAGE_KEY","FOLDER_MODE_KEY","FOLDER_MODE_URL_PARAM","DEFAULT_COLUMN_WIDTH","MIN_COLUMN_WIDTH","MAX_COLUMN_WIDTH","STATETREE_FILTER","JOBS","OUTDATED","UNREAD","ICONS","Job","Task","Notice","ContextMenu","scrollStep","panel_added","ensurePanelAdded","panel","mousedown","ev","stopPropagation","showPanel","removeClass","redraw","addClass","onHide","hidePanel","hideAllPanels","each","elem","offset","getOffset","ipad","init","menu","eventName","off","on","toggle","defaults","arrowWidth","shiftX","shiftY","cssClass","arrowImage","items","options","doInit","parents","first","extend","_panel","hideAll","hasClass","opt_event","targetElement","show","lastElement","lastPanel","getCoordsFor","coords","fillContainer","floor","top","tuneContainer","ok","onShow","one","preventDefault","click","showAt","isInternal","left","event","imageArrowUp","id","style","divArrowUp","css","append","scroller","imageArrowDown","divArrowDown","html","height","find","wheel","delta","wheelDelta","detail","cancelEvent","cancel","returnValue","scrollTop","attr","innerHeight","removeEventListener","onmousewheel","overflow","width","background","padding","ENV","isAndroid","max","paddingTop","iScroll","useTransform","addEventListener","scroll","autohide","clearTimeout","jContainer","target","correspondingUseElement","jContextMenuTable","render","isTablet","_this","renderItem","proxy","self","item","jsaction","it","oncreate","cont","onCreate","upd","visibility","text","bottomSeparator","href","tbl","disabled","isDefault","isDisabled","iconx","icony","hoverIconX","hoverIconY","imgCell","icon","image","imageX","imageY","renderImage","hoverIcon","hoverImageX","hoverImageY","tr","textCell","_event","iconHoverCSSClass","statistics","iconCSSClass","action","area","onClick","CR","write","stataction","name","get","arrowCell","subPanel","parentCoords","subMenu","zIndex","showSubMenu","hideSubMenu","$this","mouseenter","mouseleave","hover","parentItem","jIcon","isHover","backgroundImage","backgroundPosition","backgroundRepeat","scr","ww","c0","useShift","hh","windowHeight","scrollLeft","lastPanelVisible","getItemById","jQuery","CT","ControlTemplate","Description","toolBar","sideBar","form","dialog","button","buttonSvg","groupCollapsed","groupSvg","tab","tabHelp","BaseObject","Class","_events","fire","EVENT","CLASS_INIT","_deprecatedMethodMessageTemplate","_parseArguments","_warnAboutDeprecatedMethod","methodName","messageTemplate","console","_simplifyName","makeSafeString","toLowerCase","bind","opt_context","ENABLE_EVENTS_LOGGING","log","unbind","isTouch","makeArray","isFunction","fireAll","mainFunc","isRun","me","result","newArgs","merge","mainFuncWrapper","asString","toJSON","CLICK","BaseReactObject","model","_model","ACCESS_RIGHTS","NO_ACCESS","CHANGE","COMMAND_TYPE","SHOW_DIALOG","END","EXECUTE_SEARCH","EXECUTE_JS_ACTION","SHOW_MESSAGE_BOX","SHOW_NOTIFICATION","BaseObjectModel","_super","load","rawData","JSONData","toURL","link","Link","ID","Type","ReferenceCode","url","URL","IsNew","setParam","executeAction","actionName","opt_params","entityLink","ReferenceName","actions","executeEntityMethod","opt_parameters","showDialogAndExecuteAction","dialogName","DocumentModel","Deferred","parameters","Array","domainMethods","changes","changedMultiSelects","isExist","ChangedMultiSelectRequisitesValues","applyServerSideChanges","fail","errorMessage","Result","reject","Error","promise","isMethodAvailable","TaskModel","start","accessRights","getLocation","TaskID","Subject","ActiveText","Observers","Performers","JobKind","_getJobKind","Deadline","InitiatorId","InitiatorID","RouteType","Rights","IsEncyptEnabled","startTask","StandardRouteCode","loadEvents","standardRouteEvents","eventsForCurrentRoute","task","eventCallback","standardRouteCode","WebAccess","Events","JobModel","currentStandardRouteEvents","LeadTaskStandartRouteCode","blocks","WorkflowBlockID","bindBeforeAskingCommonEvent","commonEvent","performResult","Core","toolBars","job","CONTROLJOB","ReferenceRecordModel","viewName","ReferenceView","Changes","resolve","MethodResult","FolderModel","WizardModel","global","Extension","setAsCurrent","Ext_Click","reload","ReloadExtension","_whenInitComplete","ready","_getFileExtensionFromURL","parts","include","ajaxSetup","async","cache","getScript","createElement","extensions","components","CMP","services","templates","TMPL","factories","FC","mixins","isbuilder","ISB","history","environment","environmentInfo","agent","navigator","oldMobileBrowser","modernMobile","orientation","os","userAgent","documentElement","appVersion","platform","Init","SideBarInit","AgentInit","ToolBarInit","FormControlsInit","DetailsInit","ObjectListInit","_DetailsGridInit","UserInfoInit","_userInfoInit","when","current","inlineHint","spinner","notifications","Spinner","InlineHint","ExtensionsInit","FolderTreeInit","_extensionsDataInit","FormInit","ext","extension","EXT","isCurrent","fn","resolveWith","Document","ReferenceRecord","Folder","events","Wizard","setEvents","value","error","message","exception","stack","tryCatchDecorator","TCD","decoratedFunction","err","then","_location","showError","isMobile","path","location","lastIndexOf","logout","CallService","isSessionInitialized","isPluginAvailable","always","isAvailableResponse","endSession","pluginMixin","_plugins","arg","param","isPlainObject","plugins","plugin","__isPlugin","registerPlugin","register","methods","warning","info","isPluginRegistered","pluginName","selectors","details","links","buttons","tabs","searches","toolBarButtons","toolBarGroups","formMixin","objectList","states","_preInit","tables","_postInit","wrappers","_containerInit","_jContainer","containerSelector","_getSubItems","WR","Detail","_getFormData","serviceURL","controls","_initObjectList","warn","Collection","Button","_ExplorerSideBar","_sideBarContainerSelector","_ExplorerTab","_ExplorerTabs","Tab","trigger","g_hasReactToolbar","resizeHorizontalTabs","ToolBarButton","Buttons","groups","Groups","ToolBarGroup","_detailsGridInit","tableParams","grids","formData","_getGrids","objectLink","_getObjectLink","objectView","Table","tablesInit","values","not","focus","select","elementSelector","ComponentClass","jSearchTarget","index","domElement","assign","_bindLeaderDrivenLoginOnRequisites","table","row","reqs","requisites","toArray","getColumnMetadata","req","currentColumnMetadata","Requisite","reqInfo","leaderRequisites","lookUpLeaderRequisites","drivenRequisites","leadReq","tableName","rowId","getRowId","reqName","leader","parseJSON","driven","drivenReq","_initLeaderDrivenLogic","bindLeaderDrivenLogicToTable","rows","_table","_row","newRow","bindLeaderDrivenLogic","lookup","editMode","_getControls","rs","jInput","extraParams","LeadSelID","jControl","needClearDriven","fillLeaderRequisites","leadValues","leaderRequisiteValues","_clearRequisitesValue","_getLookupValues","leadReqVal","getValue","_getRequisiteByFullName","fullName","getRowById","reqFullNames","_fillLeaderForDetailSectionRequisite","requisite","getReferenceSelectParams","settings","recordId","refCode","getReferences","referenceCodesAndReqNamesInDetailSection","queryContext","number","requisiteNumber","filter","useadditional","disablespecialprocessing","getRow","ReferenceSelectDataProvider","sendQuery","count","leadingRequisitesValue","encodedTitle","displayValue","title","Plugin","context","afterMainClassInit","GetWSSParam","Url","IsFirstParam","CheckForLoginPage","_isSessionAlive","GetParamInURL","getParam","ChangeParamInURL","RemoveParamInURL","PrepareUrl","ParamStr","Params","newUrl","DoAction","paramStr","needSubmitForm","newFormAction","inHash","setTimeout","_iterator","_isArray","isArray","_i","Symbol","iterator","_ref","next","startsWith","paramSplit","submit","ActTab","match","hashTab","hashTabMatch","includes","ex","GetURLHash","GetURLWithoutHash","asStringWithoutHash","DoActionHash","callback","ShowTopSpinner","ExtensionName","ShowMessage","ShowError","HideTopSpinner","showWarning","WrnShow","HintShow","SerializeForm","__legacy_serializeForm","cardForm","hidd","dispInp","serialize","BindBeforeUnload","g_formContainerSelector","initDef","g_prevFormVal","needShowMessage","currentView","g_RightsChanged","CloseWindow","close","addAttachmentInfo","jAttachments","AttachmentStr","jMe","kind","additionalAttachmentInfo","UnbindBeforeUnload","ShowJobAttachments","ShowJobState","GetJobEdit","mode","modeParam","Kind","CardTab","mainTab","isModifiedByUser","ConfirmDialogNew","SetJobApproveParams","BaseAcceptContolJob","resultIndex","acceptContolJob","ResumeContolJob","resumeContolJob","CreateJobSubTask","open","onunload","FreeJob","jobId","JobID","WSSParam","ajax","contentType","dataType","success","ShowState","SaveAndCloseTask","CreateSubTask","EnterEditMode","ShowTaskCard","CloseBaseTaskWindow","taskId","FreeTask","StandartRouteSelected","BaseCancelStandartRoute","ShowEDocCard","ShowSignInfo","ShowEDocHistory","ShowEDocPreview","EditModeForEDoc","view","ShowBoundEDocs","response","DocumentID","newMode","View","getReferenceView","NTF","_toggleChange","request","undoRequisiteChanges","JSON","parse","pushState","ToolBarModel","severity","Severity","Number","SaveInDoc","stage","CallbackOrAction","isNeedAddInAttachments","sideBarTabs","enable","needReload","EDocID","edocid","Stage","reloadParentWindowOnClose","opener","AddAttachment","save_ok","warningMessage","ShowSetDocumentRightsDialog","save","Success","save_fail","Password","EncryptionKey","receiverObjectLink","currentUrl","saveAndAttach","parentId","pathname","SaveRights","srcLink","CompCode","SourceLink","dstLink","docLink","DestLink","refLink","Record","Links","SaveWithEncoding","certChkBox","passwordChkbox","RequestPasswordForDecryption","GetEncryptionKeyForDoc","Encoding","PluginName","encryptionKey","password","onError","docID","encoding","onSuccess","RequestToken","token","transmitRequest","Version","src","rightsJson","rightsChanged","IsRightsListValid","ShowInfo","currentRights","CheckRightsHaveChanged","newEcoding","GetDocNewEncoding","rightRecords","rec","RequestActionWithGroup","isGroup","RightType","right","rightsDelegationSetting","GetRightsDelegationSettingValue","rightsDelegationChanged","rightsDelegationInitVal","RightsJSON","RightsDelegationTurnedOn","accessLevel","onActionSelected","IsGroup","needCheck","SetEncryptionForDocument","mbox","dialogs","MessageBox","okCancelButtons","opcode","OpenUpUserGroup","groupID","children","groupName","needOpenSubgroups","onGroupOpened","GroupID","NeedProcessSubGroups","RenderItems","AddUserByDiv","RightsDelegationCheckBoxVal","RightsDelegationCheckBox","is","oldValue","newValue","sort","RightsObject","RightsChanged","OnEncryptionSet","passwordCheckBox","certCheckBox","currentEncoding","newEncoding","RequestSetEncryption","EncodingType","EncodingChanged","encChanged","removeAttr","certEncryptEnabled","tabName","ChangeTab","isChanged","UndoEDoc","SaveAndCloseEDoc","timeoutHandler","CloseDocWindow","UseGlobalLock","toastMsg","Toast","isLocked","showSuccess","LockUnlock","jButton","Export","selectId","checkedId","inNewWindow","VerNumber","DocSendAsAttachment","CloseExportDlg","FreeEDoc","referrer","VerList","ChkLockID","ChkExportedVersion","Warning","prop","GetImgByExt","enableLock","edocId","ShowFolderCard","EnterEditMode_FolderCard","UndoFolderCard","folderId","FreeFolder","noCheckSubObj","SaveFolderCard","need_close","FolderKind","FolderID","selectedUsers","saveRightsByService","additionalText","addButton","CurrentUserID","checkCurrentUserRights","mainText","SaveFolderCard_WithQuestions","SaveAndCloseFolder","folderID","needClose","rightsToSubObjectsDialog","applyRights","isNeedReplace","shouldClose","waitDialog","rightsDialog","NewUserRights","wdialog","BaseDialog","OldUserRights","removeDefaultButtons","resultDialog","onClose","closeOrReload","maxRights","hasFullRights","newRights","parseRightsList","rights","rightsArray","user","rightsType","DisableIsAllCheckboxNotChecked","reqname","el_query","defaultFlag","searchAreaText","checked","searchAreaCard","searchObjEDocument","searchObjCustomWork","searchObjFolder","btn","searchAreaName","DisableButton","DisableTextbars","htmlWarning","remove","txt","DisableSearchBtn","SearchPseudoArchiveTagChanged","DisableTextbox","FreeWizard","CloseBaseWizardWindow","DisableWizardButtons","notAutomatically","jShowRefCard","versionNum","hasVersions","g_defaultListAction","openForWrite","getPlugin","okText","isShowCancelButton","CallServiceInternal","isSelected","CallServiceSync","page","changeTab","ChangeTabDoc","ChangeTabFolder","ShowAllCustomWorkState","ReloadExplorer","reloadExplorer","resize","setRealHeightAndWidthOnResize","setRealHeightAndWidth","InitMouseEvents","pagezoom","PageInit","InitTooltips","AfterSelectFunc","needFillLeadAndDriven","ClrVal","g_FillLead","g_FillDriven","RefSel_AttachMultiResult","BindLeaderDrivenRequisites","g_GetLeadSelIDs","leaderRequisiteName","leaderParts","leaderControlName","ht","LeadIDs","leaderData","isEmptyObject","getFirstRefCode","stringify","dataProvider","_leaderControlName","SetValue","change","ClrOnlyDriven","FillDrivenIfItResultHasOneRecord","CurentID","IDs","concat","DrivenIDs","reqID","LeadSelIDs","refurl","encodeURI","Clear","updateHintData","newRecID","RefCode","compcode","RefSel_InitHint","RefSelID","inpId","removeData","qtip","InitAdditionalInfoTooltip","escapeHtml","showInstructionDialog","setHtml","BindHelpIcoClickOnModalWindow","debug","browser","major","linktoOldconsole","dir","object","selector","E","service_method","error_handler","dfmTabName","callbackRunChecker","OnTabChanged","triggerHandler","htmlEl","hasAttr","getElementIndexByAttr","array","closest","whenAllDone","deferreds","currentDeferred","failures","successes","cookieName","sessionId","getTime","keepAliveLoop","getSession","cookie","runSession","setSession","expires","setInterval","keepAlive","_isDarkTheme","getSelectedLinks","contextMenuObj","takeLinkFromContextMenu","takeLinkFromCard","isAllRecordsInFolderSelected","jObjectContents","componentName","UserFilterText","UserFilterRequisites","getlikeFilterRequisites","serviceUrl","PredefinedFilter","getPredefinedFilter","SearchName","SearchID","Mode","ObjectType","_takeLinksFromServiceResponse","takeLinksFromPage","unselectedLink","hyperlinks","unselectedLinks","getUnselectedItems","some","hyperlink","convertTypeToKind","cardObj","opt_isGettingNameFromObj","getCardObjectName","refcode","ReferenceCaption","Name","selected","contextMenuCopyObj","getItems","HTMLElement","node","caption","makeLinksFromItems","getSelectedItems","refCaption","desc","referenceName","getCurrentFolderId","pasteLinksToFolder","destId","source","SourceID","getID","SourceType","EnableOrDisableCheckAll","folderTree","updateByFolderID","pasteLinksToBoundDocuments","DocID","pasteLinksDefault","DestID","DestType","setLinksSource","sourceId","setItem","sourceType","CopyLinks","clipboard","copyLinksToClipboard","copiedLinksCount","completeMsg","CutLinks","convertAgentLinksToLinkModels","convertedLinks","convertLinkModelsToAgentLinks","linkModels","linkModel","Desc","state","isAllItemsSelected","PasteLinks","destType","g_ViewOnlyMsg","getItem","afterDeleteCallback","needSubmit","needConfirmDeleting","isFromTree","getSourceType","callDeleteLinksService","linksToDelete","getLikeFilter","updateNodesWithFolder","UnselectedLinks","UpdateCopyPasteIcons","updateChkAll","ShowTopSpinnerResult","deleteAll","GetSelectedID","GetRowsCount","ReturnLocalCopyCM","obj","version","ReturnLocalCopy","documentID","versionNumber","encodingType","fileName","editDate","OnConfirmRecoverLocalCopy","EncodeType","EncryptionPluginName","additionalParams","_returnLocalCopyRequest","resultMessage","RemoveItemFromRecoveryList","modifyDate","GetLastEditDate","confirm","0","1","GetDocumentFileName","LocalCopyRecommendedAction","ShowDocumentRecoveryConfirmation","GetDocumentEncodingType","pass","ReturnDocument","successCallback","errCallback","Token","getDocumentListItem","textContent","nodeValue","VersionNumber","onConfirm","disableButton","showQuestion","GetConfirmRecoveryDlgHtml","yesNoButtons","spinnerImage","spinnerHtml","recoveryProcMsg","outerHTML","OpenLocalCopy","invoke","DeleteLocalCopy","SilentMode","OnConfirmDeleteLocalCopy","updateOpenedDocumentsWidget","OnDeleteCallback","ShowDocumentDeleteCopyConfirmation","localCopies","ControlName","Documents","content","instruction","MakeInfoMessage","wordWrap","maxHeight","isShowOkButton","cancelText","initJs","CloseRecoveryDialog","AddEmptyItemToList","IsRecoveryListEmpty","footer","openedDocumentsWidget","Doc","OnPasswordEnter","OnClose","SetNewPassword","ChangePassword","passwordConfirm","oldPassword","docName","passwordInput","onOpen","BindPasswordFieldToOk","keyup","enableButton","SetPasswordForDoc","checkbox","IsPasswordConfirmed","confirmation","changePassword","OldPassword","NewPassword","ShowWarning","SetCertForDoc","passwordCheckbox","LoadSubRelations","additional","list","InitHover","InitListClick","ShowRelations","tblID","tbl_ids","trAdd","isAdded","after","RefSelect_GetSelectedValue","RecID","Reference_OpenRecordInNewWindow","viewNameParam","g_SysCode","g_ExtName","InputOnMouseOverForShowAddIcons","IsShowCreateButton","IsAccessDenied","icons","OpenIco","CreateRecIco","selVal","test","eq","InputOnMouseOutForShowAddIcons","EditVersion","funcReload","ReloadVersionList","VerLockOrUnlock","Ver","addArea","s_res","InitContentListToolbox","cont_id","setInlineHint","checkBox","labels","filterVariants","arr","setLikeFilter","filterVal","filterRequisites","isStatisticEnabled","componentID","LinkClick","SaveLastRun","getStandardRouteCodeByID","routeID","failCallback","getFilteredRecords","referenceCode","filterExpression","filterValue","recordsCount","startFromRecord","sortIndex","sortDirection","FilterValue","Requisites","RecordsCount","StartFromRecord","SortIndex","SortDirection","GetStandardRouteCodeByAnalit","GetRecordWithFilteredRequisitedByAnalit","ToggleItem","jItemCheckBox","jItem","isChecked","toggleItem","ToggleAllItem","isSearchMode","ToggleAllItemsInComponent","comp_id","comp","num","UpdateSelectionNumbers","objList","prepend","sign_button","del_button_initially_disabled","copy_button_title","del_button_title","iconSrc","listReq","chk","scrollActive","_comp","EntityListInit","allowSelect","enableActions","chkAll","eventHandler","superHeight","InitObjectContentsAutoLoad","_updateSelection","bindSelectAndOpenItems","_selectItem","ToggleFolderItem","StopSelectOnIconClick","jItems","handler","classes","InitShowHideActions","which","ShowContextMenu","ListRequisite","pageX","pageY","lr","onUpdate","trs","jObjectListItemTitle","DoFirstAction","InitEDocIconClick","hoverEventNames","GetEventsName","jIcons","isManualTriggered","EntityList_ShowAction","isKeyNavigationActive","dbg_is_hover","MakeActions","listActionsSettings","sett","EntityList_HideAction","g_isPreviewEnabled","actionsHTML","objKindMap","fol","ref","usr","ver","GetObjectInfoFromRow","objKind","objStr","iconHtml","needshow","SetPreviewActionFirst","innewwindow","SortEditActionsByPriority","ITEM_IMG_TEMPLATE","temp","js","retFalse","secondAction","DoNotShowInSearchResults","IsDocOpenedForEditByDefault","ShowWhenAgentEnabled","g_openDocForEditByDefault","IsDocOpenedForReadByDefault","defaultAction","IsIsDocOpenedForReadByDefaultAndPreviewDisabled","IsRecoverActionsAvailable","jContext","DoNotShowWhenAgentEnabled","isAvailable","GetSelectedObjects","IsIsDocOpenedForEditByDefaultAndPreviewDisabled","MinBottomDistanceToStartAutoLoad","IsOpenActionsAvailable","AutoLoad","$el","mc","bottomDistance","BindOnScroll","size","$loadbtn","jSpinningThingy","appendTo","removeSpinningThingy","offsetHeight","objs","jAutoLoadNoMore","jSpinnerText","isUnselected","jcheckBox","_loadPage","UpdateRowsCount","explorer","mainScroll","refresh","g_MaxRowsPerPage","sameId","sameKind","ExplorerInitialScroll","nextPage","itemsOnPage","initialItemsCount","pages","updateOrApplyGridOptions","idListReq","ListRequisiteClass","ceil","initScroll","enableButtonAddInListRequisite","AjaxInProcess","g_EmptyCheckFunc","control","ProcessEmptyChecks","blur","GenReloadVersionList","controlID","ErrorClientID","scrollbarWidth","div","w1","innerWidth","w2","ClearSelectedElements","ShowFolderTree","UpdateFolderTreeScroll","isChildFolder","InitSearchField","InitContextMenuForBound","InitCheckboxRequisite","displayControl","valueControl","g_addinfo","SetElementToolBar","dataobject","getHintDataObj","sourceFolderPath","targetFolderPath","currentFolderPath","uniqueIndex","isRootFolder","dragEl","hintContent","yes","delay","opt_showOptions","effect","no","viewport","eval","AttachTooltipToElement","opt_showAfterAttach","opt_positionOptions","getContent","zindex","GenerateAdditionalInfoTooltipHtml","hintTimeout","btnPrevClass","btnNextClass","Caption","Href","Text","HasImage","hint","fixed","leave","pagesCount","mouse","ImageSRC","Style","PageIndex","ButtonPrevClass","api","ButtonNextClass","HasButtons","jCurrentButton","isPrev","opt_position","jQtip","currentButtonHintSelector","jCurrentButtonHint","prepare","Image","changeInfo","Validator","regexstr","keypress","code","fromCharCode","docSelection","selection","createRange","Sel","SelLength","moveStart","SelStart","SelEnd","selectionStart","selectionEnd","patt","isIDevice","decimalSeparator","oldf","g_clipboard","isFilled","copy_button","IsList","Values","sign_button_initially_disabled","GetButtonsData","isListReq","del_button","objType","reason","allCheckBoxes","checkedBoxes","allCheckBoxCount","Disable","ReadOnly","newLinkWithName","valJSON","OnLoad","onLoadFunc","Enable","ShowSpinner","GetSelectedLinks","hrefs","signLinks","linkContainer","apiLinks","HideSpinner","ClientID","pasteCount","newCount","svcParams","counter","CustomWorkID","CustomWorkType","callServiceToPaste","svcMethodName","CallMyService","RenderList","oldCount","DeleteLinks","e1","e2","sel","cannotDelete","getLinksFromClipboard","AddLinks","delCount","CheckObject","DeleteLink","IsAttachments","UpdateList","ValuesJSON","input_id","errorStr","EnableSameRecords","add_id","grep","inArray","ids","AddRefRecToList","newObj","InitAttachments","att","AddRefRec","ReferenceSelectInstance","setValue","GetLinks","SetCannotDelete","ContentKind","NewValues","listContainer","InitJS","errorCallback","ShowScrollBar","EmptyText","IsShowActions","AddObject","empty","HTML","RegisterEmptyCheck","method","lastFocusedInputId","img","container","results","inpParent","selectedItems","fakeInp","timeout","refcodes","refcodesCount","selectedRefCode","selectedRefIsClosed","minChars","mustMatch","showNoMatchText","cellIDIndex","cellToInput","multiselect","allowlike","isCustomSelect","currentPage","maxPages","mainReferenceCode","sendQueryOnlyOnEnter","suggestLastMode","suggestInProcess","NoMatchText","CancelText","TitleText","HideContainer","_hidePlaceholder","changeInpWidthAndPadding","_showPlaceholder","replaceSelectedItem","deleteAllItems","oldID","newValues","onlyLast","setValues","needTriggerResult","process","pollInputChanged","onInputChanged","oldv","pollTimer","interval","onImgClick","hideContainer","selectedItemsCont","contId","prependTo","SetDisabled","moveInputToSelecetedItem","initSelecetedItems","suggest","isReadonly","inpVals","_ids","hiddVals","_names","createNewSelecetedItem","createNewSelecetedItemHTML","names","multi_windowResizeInit","rsTimeout","loadPage","disableSendQuery","check","selectEmpty","moveReference","nextSelIndex","refCaptions","altKey","keyCode","checkLongDeletion","multiLeft","multiRight","selectReference","deleteItems","prev","selected_row","_hideAndResetContainer","_startDeleteTime","now","_deleteTimeout","move","overed","scrollToOver","overTop","getValues","idParts","groupcode","oldHiddVal","triggerResultEvent","isOne","placeholder","backgroundColor","refDesc","hintData","getHintData","delIco","spanClass","inputText","dataId","spanAttributes","dataText","lastItem","middleX","before","outerWidth","clientX","deleteOneItem","changeHiddenValue","callSelectEmpty","isNeedAnimate","removeFunc","oldval","animate","deleteItemsTimeout","childspan","isInitOrBlur","checkVis","parentWidth","inpWidth","getTextMetric","sumWidthBeforeInp","sumWidthAll","isInp","dLeft","setCoordForContainer","input","textMetric","display","styles","replaced","last","toBegin","toEnd","AlwaysEmpty","showContainer","firstItem","bindScrollLoad","getQueryValue","vs","showSpinner","spinner_timeout","hideSpinner","setReferences","references","_checkIsReferencesSetProperly","addReferences","_makeIconAccessible","_getToolTip","lbl","refs","_getReferencesCount","k","lastRequests","afterShowCallback","onSearchQueryDoneCallback","refsWithRecords","lastQuery","query","onSearchError","searchInOtherReferences","requests","OnSuccessFunc","OnErrorFunc","isHttp","deferred","pop","abort","lastSelectedRefCode","refsWithErrorMessage","updateTableVisibility","isEmpty","Query","Page","Limit","OnSuccess","OnError","limit","makeTitleAndFooter","beforeRefCodes","afterRefCodes","makeDivs","codes","NeedShowHint","createRows","hintClass","rowsByUid","table_html","highlight","rowUid","newRows","siblings","outerHeight","wh","minWidth","term","ReferenceSelect","SetSelected","resultMulti","ReplaceSelectedItem","ReplaceLastSelectedItem","SetValues","SetEnabled","_parseResponse","entities","jqXHR","textStatus","status","firstN","currRowData","entity","DropDownList","keyvalues","opt","initValue","prevValue","_isShown","onAfterChange","addPlaceholder","keyPress","contents","filterPlaceholder","isVisible","goTo","selectCurrent","direction","selEl","newEl","toggleSelected","tmp","keyFilter","hasItems","setCoord","selectedEl","setInitValue","setPrevValue","opt_needTriggerResult","valueIsChanged","getDisplayValue","clearDropDownListItems","addDropDownListItem","removeDropDownListItem","disable","DropDown","HidePickContainer","UserRightInit","ObjectID","HashCode","Msg","IsNeedHideTree","jRightsTable","updateTree","hideFilterView","rootUl","treeview","collapsed","dataWS","onAfterSuccess","MarkAllGroupsAndUsers","InitTabletContextMenu","delegate","UserInTreeMouseOver","UserInTreeMouseOut","UserRightsMouseOver","UserRightsMouseOut","contextmenuButton","UserListShowContextMenu","undelegate","InitRightsUserTreeKeyNavigation","filterInput","keydown","FilterUserAjax","currentTarget","CheckIfFavoritesEmpty","favGroup","nodes","buildTreeNodeHTML","selectedIDs","MarkUser","RightsTable","currObj","_GetContextMenu","addClickHandler","favoritesGroup","favoritesClickHandler","favoritesIcon","itemID","actionIcon","liID","favoritesMenuItemText","addOrRemoveFavorites","addMenuItemText","menuItems","getReferenceCode","itemId","needToAdd","PrincipalID","NeedToAdd","favGroupUl","ReloadFavoritesGroup","initTreeViewItemEvents","add","markUnmarkItemAsFavorite","span","AddFavoritesToRightsTable","IsSelected","ItemId","isFavorite","iconClass","GetHashCode","live","SetEvents","arrow","SetRightChoose","SetNewRight","GetUserID","UserID","prefixIndex","rightsID","parentsUntil","isOldUser","IsOldUser","g_MaxRightsValue","GetFullRightsUserCount","oldSelUsers","SelUsers","oldUser","currentRightVal","rightValue","RightsToNumber","g_OldChangedUsers","fullRightsUserCount","ChangeRightCycle","sp","DelIco","RemoveUserFromRights","mark","charAt","NewUserID","NewUserName","lastFilledRow","NewUserRight","jRemoveButton","classList","jCircleCell","jCellElement","element","circleRight","newRow_div","rightsCell","UserFilterTTimeout","DoFilter","idDest","idSrc","elJq","GlobalFilterUser","cloneDiv","UserTreeId","FilterAreaId","defvalue","AjaxUserSearch","clearInlineHint","FilterArea","currUser","rightsTable","tree","filterResults","mainContent","rightsUserList","UpDownKeyNavigation","down","currentItem","nextItem","FindSiblingOrParent","UnhoverAllItems","HoverItem","ScrollToHoveredItem","sibling","subItem","ExpandOrCollapseGroup","expand","currentID","lis","SelectItem","DeselectItem","scope","ClearInputFilterUser","InitializeSessionRoutiness","SessionKeepAlive","SessionUpdateTime","xhr","ObjLockKeepAlive","LockUpdateTime","exports","User","_current","models","_arr","elements","addElement","deleteElement","deletedElement","clear","linkMixin","isNew","openInDesktop","toLinkModel","fromLinkModel","opt_referenceName","getObjectType","isNaN","_url","_refresh","opt_target","openIn","win","paramName","_getParam","_getNonEncoded","decodeURIComponent","getParamInHash","setParamInHash","_setParam","newHash","hashIndex","getExtension","hash","re","encodeURIComponent","removeParam","urlWithoutHash","regexS","regex","_getUrlFromLink","host","_getPageNameByKind","utils","compareData","v1","v2","NEGATIVE_INFINITY","parseFloat","getAssociativeArrayValues","keys","Cache","_errorCatched","_data","removeItem","isStorageAvailable","_getStorage","localStorage","setObject","getObject","includedLevels","I","W","logLevels","Log","_BaseObject","_classCallCheck","_possibleConstructorReturn","_disabled","saveImmediate","maxStackSize","_inherits","strToLevel","level","getLevel","logLevel","setLevel","isDebug","_write","isLogsEnabled","queue","_writeQueue","partToSend","tag","_log","showLastMessages","line","dt","Time","fd","getMilliseconds","Level","Tag","Message","messages","logParams","onerror","errorMsg","lineNumber","logDebug","ENABLE_EVENTS_LOGGING_JQUERY","prevOff","prevTrigger","History","allowHistory","POP_STATE","CHANGE_STATE","PUSH_STATE","replaceState","SessionCache","sessionStorage","sessionOnly","sessionCache","ServerCache","ParamName","ParamValue","serverCache","_activeRequests","_call","opt_spinnerText","opt_onCompleteSpinnerText","opt_hideError","opt_hideWarning","sync","hideWarning","requestId","rejectWith","ShowInlineHint","hideError","messageType","responseJSON","responseText","errorText","errResp","complete","_sessionBrokenDialog","_sessionRestoredDialog","statusCode","isOpened","openLogin","isSingleInstance","reference","script","authenticaion","folder","session","cardform","userProfile","opt_control_id","hasID","_L","templateName","opt_data","opt_disableCache","opt_sync","opt_partials","jDeferred","getCustomDeferred","loadPartials","partials","template","findTemplate","_template","invertedNames","invert","queries","partialKey","partialName","partial","findRemoteTemplate","findCompiledTemplate","findCachedTemplate","cached","Hogan","compile","templateText","userName","newPassword","confirmPassword","isFirstLogin","failed","Login","PasswordOld","PasswordNew","PasswordConfirm","IsFirstLogin","loginUser","providerName","userRealm","userPassword","rememberMe","UserName","Realm","ProviderName","RememberMe","setTimeZone","timeZoneId","createTableRow","detailNum","callFunc","Obj","DetailNum","copyTableRow","sourceRowID","SourceRowID","RowID","rowID","cmd","needSaveObject","folderIdToPaste","Req","Cmd","NeedSaveObject","FolderIDToPaste","ReceiverObjectLink","cryptography","getSignableAttributes","certificateIdBase64","pluginNameBase64","service","buildSignature","signingAttributes","signedAttributes","verifySignature","signature","signatureBase64","signContent","comment","isApprovingSign","isForSubstitute","onSignedCallback","additionalInfo","pluginVersion","tokenPinCode","edms","signAttributes","signableAttributes","substituteUserCode","VERSION_STATE","DEFAULT","IN_DESING","ACTIVE","OBSOLETE","getNameById","docs","setNote","docId","verNumber","note","Note","setState","State","sign","documentId","cardTypeCode","certificateId","signDocument","signDocResponse","signContext","onAfterSign","onBeforeSign","foldercontent","reinvokeCommand","defaultContents","unselectedItems","commandNumber","commandType","defaultreinvokeCommand","commandResult","reinvokeParameters","setUserStatus","StatusName","setStatusForAllObjects","statusName","createVirtual","folderName","initialContents","getReferenceRecordsNames","jsonObject","deleteRecord","recordID","columnsAutoWidthEnabled","referenceView","isEnabled","opt_placementContext","PlacementContext","Enabled","setFilter","opt_referenceView","filterID","FilterID","createNewFilter","filterName","saveFilter","opt_filterName","FilterName","removeFilter","getReferenceCaption","build","Model","buildSync","run","scriptName","scriptParametes","runWithSerializedForm","serializedForm","SerializedForm","SetNewLanguage","langCode","LangCode","setPreviewScale","scaleValue","previewScaleStorageName","setTheme","themeName","opt_themeType","setCustomTheme","themeType","textColor","addLastUsedObject","objectID","objectName","removeLastUsedObject","deleteLinks","sourceID","pasteLinks","destID","createTaskWithAttachments","attachments","Attachments","setAttachmentsRights","taskID","showLogoutPrompt","exit","ShowReportParams","reportName","showReportParams","menus","forms","_details","dataViews","DV","gridPlugins","_controls","_editors","jEl","selectList","passEventToContainer","BLANK","NOBLANK","TODAY","TOMORROW","THIS_WEEK","THIS_MONTH","THIS_YEAR","BaseDataProvider","loadOptions","totalCount","loadState","saveState","savedWithoutErrors","extendDefaults","ELLIPSIS","TEMPLATES","MAIN_INPUT","LIST_RECORD","POPUP_AREA","LOAD_MARGIN","SelectListControl","instanceID","listInstanceID","_jDropDownIcon","_jWait","_jInput","_jOk","_jCancel","_jCheckBoxContaier","_spinnerTimeout","selectedRecords","_render","initialValue","_getInputValue","_initControls","_bindEvents","notSelectedRecords","like","openList","_applyLike","_hideEllipsis","_showEllipsis","_applyOnEnter","column","ctrlKey","charCode","_jList","_applyList","_handleScroll","_hideOpenedControls","jList","records","listRecord","rightPosition","winWidth","leftPosition","BEFORE_LIST_OPEN","waitText","_bindListEvents","_initListControls","jArea","_appendRecords","scrollHeight","isPending","fadeIn","take","BEFORE_RECORDS_APPEND","fadeOut","record","invertedMode","_validateLike","currentLike","VALUE_CHANGED","getElementIdFromValue","Value","jOption","compact","isInverted","updateState","newState","equalRes","columnType","filterType","Like","In","Equal","ON_GET_VALUE","ITEM_SELECT","SPECIAL_VALUE","DATE_SPECIAL_VALUE","CONTROL_EVENT","DateValuesPlugin","_selectList","_beforeListOpen","_beforeRecordsAppend","_isAllSelected","_isExist","where","byref_records","unshift","YESTERDAY","SpecialValuesPlugin","_onGetValue","_onRecordSelect","jInp","Display","findIndex","emptyIndex","emptyRecord","hasEmptyRecords","byref_filter","without","findWhere","blankAndNoBlankItems","chain","TEMPLATE","DateControl","showTime","dateType","_fillInputValue","_applyFilter","isSet","prevBeforeShow","newBeforeShow","formatFunc","GET_VALUE","OPEN","StringEditor","_column","_value","_displayValue","renderState","_gridComp","commit","commitChanges","isUndefined","field","_getWrapper","_updateData","_getValueForRender","initKeyNavigation","leaveOut","stayHere","stopImmediatePropagation","isAllTextSelected","range","hasText","_isAllTextSelected","caret","UP","_handleUpDownKey","RIGHT","shiftKey","metaKey","ui","_wrapper","_parent","parentCurrent","isRequired","sectionNumber","isReadOnly","hasCalculation","isValueChanged","serializeValue","applyValue","newData","loadValue","validate","valid","destroy","setCustomAction","opt_tooltip","_getColumn","currentTable","getTable","columns","TextEditor","PickEditor","_renderer","selectedKey","selectedValue","Pick","renderAsync","DOWN","clearValues","wrapper","addValue","DateEditor","initPicker","end","adjustDate","LEFT","IntegerEditor","autoNumeric","mDec","aPad","currentColumn","FloatEditor","BaseObjectSelectEditor","hiddenInputValue","selectedRecordID","detailRecordId","_createRenderer","jEditContainer","hasNoValue","disableSlickOnEnter","passKeyToInput","press","Event","ENTER","focusToInput","unFocus","DELETE","CONTROL","TAB","ESCAPE","SHIFT","PAGE_UP","PAGE_DOWN","CAPS_LOCK","ignoredKeys","BACKSPACE","selectAllText","_getSelectedItemElements","isFocused","_createWrapper","ReferenceEditor","Reference","opt_refCode","setMainReference","addLastObjectsPseudoReference","lastReferences","removeLastObjectsPseudoReference","bindReferenceGridDialog","DocumentEditor","DocumentSelect","SortingPlugin","_grid","useServer","_useServer","grid","Grid","BEFORE_GRID_INIT","_onGridBeforeInit","COLUMN_INIT","_onColumnInit","reSortColumns","_reSort","dataView","byref_settings","byref_column","isSpecialColumn","_onGridInit","slickGrid","_bindOnSort","_restoreSorting","AFTER_DATA_LOADED","sortingColumns","Sort","sortInfo","columnId","sortAsc","IsAsc","setSortColumns","_columns","comparer","g1","g2","setSortColumn","rowsArr","_isNew","rowData","rank","fastSort","invalidate","onSort","subscribe","sortCol","reloadData","GroupingPlugin","_groupItemMetadataProvider","Slick","Data","GroupItemMetadataProvider","GRID_INIT","_onGetVisibleColumnsForDialog","GET_VISIBLE_COLUMNS_FOR_DIALOG","SET_VISIBLE_COLUMNS_FROM_DIALOG","_onSetVisibleColumnsFromDialog","unGroupColumnsById","_unGroupColumnsById_exported","updateGroupingInfo","toogleGrouping","_toogleGrouping_exported","_includeGroupedColumns","_excludeGroupedColumns","columnIds","GroupColumns","grouping","getUID","headerCssClass","getter","formatter","byref_dataView","byref_options","onColumnsReordered","_getGrouping","pluck","isEqual","newGrouping","_oldGrouping","onUnGroup","jColumn","onGroupSort","prevGrouping","groupCol","_restoreGrouping","_handleGroupToggle","IsGroupPanelVisible","setGrid","shrinked","gridColumn","SortIsAsc","restoreGroupedColumns","Opened","expandCollapseGroup","_setupGroupsReordering","prepareDataBeforeToggle","groupingKey","isCollapsed","isClickOnToggle","sortable","containment","connectWith","cursor","tolerance","distance","forcePlaceholderSize","stop","beginUpdate","resortGroupColumns","receive","sender","toast","sortColumnInfo","handleGroupByDrop","bindGroupSort","hideColumn","getGrouping","col","_updatePlaceHolder","groupsCount","_updateGroupingInfo_exported","isExpand","currentGrouping","LastCollapsedGroupingKey","_onAfterDataLoaded","needToEnable","jPHolder","jGroupBy","setOptions","showGroupByRow","groupByRowHeight","resizeViewport","byref_visibleColumns","groupInfo","unGroupingColumns","visibleColumn","FooterPlugin","pageIndex","_jPager","_jPagerControls","STATE_LOADED","_afterGridStateLoaded","_afterGridDataLoaded","updateFooter","_updateFooter_exported","initPager","DATA_LOADED","renderTemplates","pageSize","navPanel","recordsFrom","recordsTo","currentPageText","PAGE_CHANGE","gridId","pageIndexSaved","jGridContainer","Take","selectOn","center","currentFilter","CurrentFilter","DisplayValue","DisplayHint","currentRecordsRange","class","HasFilterExpression","CurrentFilterName","CurrentFilterNameHint","FilterExpression","FilterHint","IsFilterEnabled","IsEnabled","CurrentRecordsRange","CurrentPage","Options","FirstDisabled","PrevDisabled","Selected","NextDisabled","LastDisabled","pagerRowHeight","pager","_initCounter","_bindFilterEvents","_bindPagerEvents","resetFilterState","Filters","resetFilter","changeFilterState","afterClick","_getData","prevPageLimit","prevPageIndex","PAGE_LIMIT_CHANGE","_toggleRecordCountDisplayMode","jPager","jRowCount","Expression","spinnerShowDelay","GlobalPageFilter","_setCountLabel","_dataSource","GlobalPageFilterLikeQuery","total","CheckboxPlugin","_checkboxSelector","CheckboxSelectColumn","toolTip","checkboxColumndDef","getColumnDefinition","selectActiveRow","syncGridSelection","SELECTED_ROWS_CHANGED","__nonDataRow","getSelectionModel","selectOnClickEvent","ContextMenuPlugin","_contextMenuOptions","_customMenuClass","_contextMenu","opt_form","_form","openContextMenu","_openContextMenu_exported","from","_openLegacyContextMenu","_openBaseContextMenu","cancelBubble","setForm","generateItems","_removeMenuSelectCssClassAndReturnClickedRow","srcElement","jRow","ColumnResizePlugin","_settings","_onWindowsResize","autoAdjustColumnWidth","_autoAdjustColumnWidth_exported","_columnsWidthIsEmpty","_saveColumnWidthState","onColumnsResized","IsColumnsAutoWidthEnabled","columnsWidth","_onAfterGridDataLoaded","resizeCanvas","forceFitColumns","autosizeColumns","getColumns","ColumnsWidth","SELECT_LIST_PAGE_SIZE","FilteringPlugin","groupDisplayLimit","selectListDataProvider","_selectListContainerSelector","_popupSelector","_slickHeaderSelector","_dataPickerInputSelector","_datePickerSelector","toggleFiltering","updateFilter","getFillingRequisites","_getFillingRequisites","_toggleFiltersArea_exported","IsFilterPanelVisible","columnFilters","_updateFilterExpression","has","jTarget","FILTER_UPDATE","expression","_getColumnExpression","onHeaderRowCellRendered","renderControl","closeOtherControls","ColumnsFilter","columnFilter","SelectList","selectListDataProviderSettings","requisiteName","skip","_updateStateAndReloadData","noop","CF","isPrevAutoFilter","IsNeedSave","SavedFilters","_getAutoFilterName","setupFiltersState","setSelectedRows","_updateFilter_exported","_updateControlsState","_removeDeniedColumns","_convertToSBRSE","_convertToHumanRedableText","allColumnsIds","filters","maxFilterID","needTrunc","reqFilter","requsiteName","columnName","wrapWith","space","group","getDateFilter","yesterday","setDate","_makeOneDayDateExpression","tomorrow","curr","getDay","firstDay","getMonth","lastDay","_makeDateBetweenExpression","block","dateFilter","operand","likeExpr","_makeDateTimeLikeExpression","displayValueFieldName","_makeDateLikeExpression","likeValue","dateValue","_isDateTimeCorrect","fromDate","toDate","d2","GF","currentFilterExpr","equalValue","ITEM","ADD","COPY","VALUE","DISPLAY_VALUE","DetailsContextMenu","_sectionNumber","_clickedCell","_clickedInContextMenu","dfmName","_dfmName","isTableDisabled","label","opt_disabled","_canAddNewRow","_canCopyRow","_getCellNumberFromEvent","editor","BEFORE_ROW_ADDED","getCellEditor","editActiveCell","setActiveCell","getDataLength","addRow","_getRowIdFromEvent","copyRow","deleteRow","currTable","reqArray","tablesArr","getTables","currentTableColumns","isSystem","getCanGUIRead","hasColumnWithDisabledGuiChange","copyRowOnServer","touch","jCell","hasFilledRequisites","lastRow","EditPlugin","_selectionModel","_exceptions","enableCellNavigation","autoEdit","setSelectionModel","CellSelectionModel","onCellChange","cell","onEditorInit","colNum","onBeforeCellEditorDestroy","onGetEditor","byref_editor","lastActiveCell","needRestoreEditorAfterReload","onKeyDown","_bindedTables","DFMName","ROW_ADDED","DATA_RELOADED","_onFocusOrUnFocus","hasAncestor","targetInExceptions","activeElement","_needSetGridsKeyScope","resetActiveCell","_setGridsKeyScopeTimeout","globalKeyScope","setScope","ASTERISK","_queryDelay","dataSource","cellTemplate","VisibleColumns","getVisibleColumns","_initializeGrid","setTable","setColumns","newColumns","nextVisibleColumns","visible","headerRowHeight","rowHeight","explicitInitialization","syncColumnCellResize","enableColumnReorder","visColumns","DataView","getRowAdditionalInfo","onRowCountChanged","invalidateRows","VIEWPORT_CHANGED","opt_force","prevState","_saveStateDelay","fadeSpeed","fadeTO","fadeTo","BEFORE_DATA_LOADED","Rows","setItems","endUpdate","_initializeColumns","rawColumns","ALIGNMENT_RIGHT","IsRequired","TextAlign","IsReadOnly","Field","columnSettings","IsVisible","Index","resizable","Width","Hint","HasCalculation","DateType","precision","Precision","asyncPostRender","_excludeSpecialColumns","getColumnsForDialog","getVisibleColumnsForDialog","setVisibleColumnsFromDialog","setVisibleColumns","SET_VISIBLE_COLUMNS","visibleIds","visibleColumns","QueryInstanceID","showColumn","opt_index","newColumn","oldColumns","isCurrentPeriodEnabled","ToggleCurrentPeriod","GET_COLUMNS_FOR_DIALOG","modalWindowButtons","_setKeyBindings","dialogClass","closeText","modal","enterOk","closeOnEscape","keyScope","isSingleme","keyBindings","_jContent","setSpinner","opt_text","removeCloseButton","AFTER_OPEN","showCancelButton","setWidth","setHeight","setTitle","_placeInCenter","_setupKeyScope","keyName","buttonId","updateButtons","_jDialog","addButtonIcon","changeButton","primary","secondary","removeButtonIcon","enableButtonWaitState","originalText","orginalText","addHelpIcon","isCustomDlg","wnd","_getDialogTitleBar","showHelpIcon","helpLinks","contextId","lastHelpLink","g_IsExtHelpAvailable","currentLink","helpLink","_currentLink","contextMenu","onOK","onCancel","existingButtons","closeDialog","data-name","globalPrevBeforeUnloadFunc","globalPrevFormVal","onbeforeunload","optimalHeight","_isFitted","round","AdjustDialogIfIpad","InitHoverForButtons","autoOpen","beforeClose","BEFORE_CLOSE","AFTER_CLOSE","BEFORE_CLOSE_BY_ESCAPE","BEFORE_CLOSE_BY_CROSS","jDialog","my","at","of","_setStatisticsClasses","jModalWindowContainer","AFTER_CLOSE_BY_OK","AFTER_CLOSE_BY_CANCEL","BaseMultiSelect","availableItemslabel","selectedItemslabel","defaultRecordIcon","defaultMarkedRecordIcon","_html","_navigationKeyCodes","_handlers","_jSelectedItemsTable","_jAvailableItemsList","_lastFilterValue","_displayOptions","availableItems","opt_selectedItems","opt_settings","instance","_hoverItem","_unhoverItem","selectItem","newItem","_addItemToSelectedItems","keyPressEventHandler","upDownKeyNavigation","_findSiblingOrParent","UnhoverGroup","HoverGroup","recordsList","rightArrowKeyPress","leftArrowKeyPress","idToRemove","deleteItemFromSelectedItemsTable","rowDeleteButton","isSelectionChanged","_prepareAvailableItemsArea","_prepareSelectedItemsArea","_markSelectedItemsInAvailableItemsList","_fixSelectedItemsTableBorder","_jFilterInput","_initEvents","renderedItems","isAreaReadonly","osName","availableItemsArea","is_readonly","availableItem","tooltip","redaonly_attr","placeholder_message","tabindex","filteredItemsEmptyPlaceholder","selItems","_markRecord","displayDelete","displayOptions","_renderSelectedItem","extra_attributes","display_delete","selectedItemsArea","display_options","option_name","area_class","selectedItem","_initSelectedItemsEvents","_initFilterInputEvents","_initExtraEvents","_InitKeyNavigation","_InitAvailableItemsListEvents","isNeedProcessChild","_getColumnsInfo","cols","colWidth","bVisible","bSortable","sWidth","_datatable","dataTable","sScrollY","bAutoWidth","bDeferRender","bPaginate","oLanguage","sZeroRecords","aoColumns","tableWidth","_initSingleSelectedItemEvents","jRemoveFromSelect","idx","_getSelectedItemById","fnDeleteRow","_getAvailableItemById","iconImage","treeMode","favoriteUserIconClass","treeModeRecordIconClass","treeModeMarkedRecordIconClass","_addPlaceholderIfTableIsempty","jRows","_InitSingleSelectedRecordEvents","fnAddData","jNewRow","deleteKeyPress","_getItemsListHeight","itemHeight","expr","Contains","words","matches","locationOrigin","origin","protocol","postMessage","destination","convertObjectListRecord","BROWSER_TOOLBAR_HEIGHT","MIN_DIALOG_MARGIN","ReferenceGridDialog","modalDialogTitle","_addReferenceCaptionToTitle","referenceUrl","_makeReferenceRecordUrl","leaderSelectedId","instanceId","_changeDialogBodyMinWidth","_changeDialogDimensions","_bindDialogEvents","_addSelectRecordColumn","filterTitle","referenceCaption","filterQuery","modalmode","likefilter","hideToolbar","jIframe","IframeWindow","contentDocument","dialogWidth","dialogHeight","_sendSelectedRecords","_initSelectionButton","_bindDisableSelectButtonInMultiMode","_bindDisableSelectButtonInSigleMode","ReferenceGridDialogCellClick","leaderValues","_getLeaderValues","contentWindow","selectRecordColumnIndex","recId","columnsAmount","selectedRow","sendRecordById","selectRecordColumn","leadReqNames","selId","originalEvent","leadColumnName","afterGroupName","create","createButton","sendMultiSelectedRecords","getButtons","createAndShow","def","selectionDone","cb","selectionCancel","opt_records","convertedRecords","sendRecordsToParent","SortableMultiSelect","sortingButtons","rowSelector","_swapRows","jPair","itemSelector","SelectableMultiSelect","jMarkedRow","sortButtons","messageBoxIcon","question","buttonText","buttonClick","okButton","okCallback","yesCallback","noCallback","cancelCallback","messageBoxButtons","showInfo","defaultButtonId","setMainText","setAdditionalText","_setDefaultButton","_getHtml","splitterIndex","_createSettingsObject","showOkButton","messageBoxIcons","mainTextHtml","additionalTextHtml","CreateDocument","_jWindow","formIsValid","jWindow","isFormValid","CheckFileSize","linkArr","resArr","initCreateNewDocumentControl","opt_mode","folder_id","moveOpenedDialogToCenter","LAYOUT","FormDialog","_pendingOperations","_keepAliveTimer","InstanceID","_freeDialog","ObjectList","showParams","freeAfterClosing","_beforeShow","baseShow","_keepAlive","_getObjectView","_registerOperation","operation","_unRegisterOperation","Height","_afterShow","_fixStyles","_initActions","_initTabs","_initDetails","isAnySelected","Actions","_initActionItems","_executeDefaultAction","HasChangeEventHandler","BEFORE_ACTION","getLabel","setLabel","setTooltip","_handleAction","allGrids","gridName","getActiveCell","DialogInstanceID","ActionName","_commandList","_getRequisitesToSend","responseAsObject","_handleFailSave","AFTER_ACTION","preventClose","setOrientation","activeTabDfmName","jTabs","BEFORE_TAB_SWITCH","AFTER_TAB_SWITCH","DetailsInitiializer","DataProviderClass","FormDialogDataProvider","DialogName","dataProviderOptions","detailsInitiializer","Initiializer","initiializer","waitForData","COMPLETE","_locked","_getAvailableHeight","_freeAfterClosing","_DFMName","initialState","_dialogName","_detailSectionNumber","makeParams","jTable","_saveSateTimeout","_makeKey","ReportParamsDialog","FormData","requisitesModels","_fillHiddenParamsCallback","FormHtml","validateForm","hiddenParams","reqKey","currentReq","isValid","globalWebAccess","FLOAT_DIALOG_TEMPLATE","FloatDialog","_inited","_createHtml","floatDialogTemplate","showMinimizeButton","minimized","showCloseButton","contentAsHtml","isLoading","hidden","loadingText","_jTitle","_jMinimizingIcon","_jCloseIcon","_jContentArea","_jLoading","_jLoadingText","setMinimized","isMinimized","newTitle","setTitleAsHtml","newTitleHtml","setContentAsHtml","setContent","showLoader","isUserExpanded","niceScroll","cursorcolor","cursorwidth","cursorborder","autohidemode","cursorborderradius","railpadding","horizrailenabled","railalign","BaseContextMenu","_imageWidth","_imageHeight","_isRendered","_menu","opt_menuItems","imageWidth","imageHeight","_jObject","_makeMenuObject","hoverImage","addItem","opt_icon","opt_bottomSeparator","opt_selected","getSelectedItem","setSelectedItem","opt_iconCSSClass","force","OnlyIconsContextMenu","opt_controlId","controlId","isHorizontal","itemEls","jMenu","jObjOffset","showIn","atTop","FormBuilder","invalidFields","displayErrors","heigth","_orientaion","_request","_action","_method","_enctype","_constructors","jForm","opt_byId","byId","jField","pickInstance","jRadios","BaseObjectSelectRequisite","setControlValue","_preventDoubles","getHeight","getHeigth","_removeField","afterRender","_addItem","_asterisk","rules","opt_maxlength","opt_validateRules","opt_type","opt_defaultValue","opt_accept","asterisk","addFileField","addInput","_wrapControl","opt_defaultvalue","opt_maxHeigth","maxHeigth","addTextarea","addTextArea","mustache_options","addReferenceSelect","opt_toolTip","opt_searchReqName","opt_filter","other","addObjectList","opt_links","opt_isList","opt_referenceCode","object_type","addMultiSelect","referenceNames","opt_isMultiSelect","searchReqName","isMultiSelect","addPick","opt_displayValues","opt_disabledValues","opt_editable","displayValues","editable","fromServerSide","validateRules","addCustomField","control_html","addCheckbox","opt_isChecked","_tryGetValue","addValidationRule","opt_error_message","_validators","_markAsInvalid","ruleName","prevColor","jBorder","_getFieldBorder","errorsHtml","_markAsValid","_fillItem","setAction","isHtmlFormEnabled","setMethod","form_method","setEnctype","enctype","clean","_preRender","launchPostRender","_postRender","_parseServiceResult","jMasterDeferred","pickWrapper","_fullSerialization","_defaultSerialization","isreadonly","FormJS","formdata","referenceSelect","reqTypes","reqUD_inv","deserialize","setDisplayValue","isDate","isDigit","search","isNumber","isEmail","validateEmail","min","ruleValue","email","requestMap","ToolTip","SearchReqName","MultiSelect","RefNames","Filter","IsMultiSelect","disabledValues","DisplayValues","DisabledValues","Editable","getData","AbstractBasePageElement","_errorMessage","isHidden","getTooltip","setIcon","getIcon","opt_callback","unSelect","DISABLE","ENABLE","HIDE","SHOW","BaseReactPageElement","_formatModel","jsAction","onInit","_formatFunction","paramValue","BasePageElement","_storedEvents","_byNameSelectorTemplate","jSvgIcon","jSpriteIcon","jUseElement","_disableClickHandler","_defaultAction","_inlineEvent","_eventHandler","continueDefaultAction","_eventHanler","buttonName","jObject","_storeEvents","_restoreEvents","_storeInlineEvents","_restoreInlineEvents","_sendSetImportanceRequest","SaveBtnName","Promise","Importance","_changeImportanceButtonStates","settableButtonName","resetButtonName","settableImportanceButton","toggleLowImportance","resetImportanceButton","CallbackFunc","DoHighImportance","DoImportance","DoLowImportance","_callee","regeneratorRuntime","wrap","_context","_callee2","_context2","_getUserList","sourceVal","_getTaskDeadlineSelector","_getQueryParams","_updateFolderList","_cardTabFullUpdate","initOrUpdateCardTab","cardTabModel","headerElement","initCardHeader","cardHeaderModel","saveTask","modelWrapper","tabNamesToEnable","_getTabName","tabIdsToEnable","tabId","AccessRights","callStartTask","customWorks","showAccessRightsDialog","Change","Full","Ignore","dialogMessage","showTaskDeadlineActualizeDialog","taskDeadlineActualizeButtons","taskDeadlineActualizeDialog","buttonModel","isDeadlineActual","deadLine","setHours","setMinutes","setSeconds","difference","restoreTask","abortTask","restartTask","toggleChange","isEditMode","IsEditMode","AbortTask","RestartTask","RestoreTask","buttonSelector","groupSelector","isEnabledOnAttachmentSelected","isEnabledOnAborted","isEnabledOnDone","isEnabledOnRunning","_jGroup","_linkedAction","_enabledMode","enabledWhen","_enabledWhen","contentsActionEnableMode","_contentsActionEnableMode","_disabledHint","_hint","isSynthetic","convertTo","buttonType","callee","showCaption","hideCaption","isCaptionVisible","getLinkedAction","getEnabledMode","getIsEnabledOnAttachnentSelected","getIsEnabledOnAttachmentSelected","Boolean","getIsEnabledOnAborted","getIsEnabledOnDone","getIsEnabledOnRunning","getIsEnabledOnlyForSelected","isSmall","getParentGroup","_setActualHint","setHints","disabledHint","ReactToolBarButton","parentGroupName","_isEnabledOnAttachmentSelected","_isEnabledOnAborted","_isEnabledOnDone","_isEnabledOnRunning","buttonSize","ReactToolBar","linkedAction","enabledMode","CHANGE_CAPTION_VISIBILITY","GROUP_FOLD_MODE","SHRINK_SMALL_BUTTONS","CONVERT_LARGE_BUTTONS","COLLAPSE","AUTO","autoHideTimeout","toolBarContainerSelector","groupHeaderSelector","smallButtonSelector","jToolBarContainer","toolBarBottomBorderClass","_index","priority","_isCollapsed","_isCollapsedOnExtension","_bindHeaderClick","headerInlineBlock","addedGroupSelector","tbgroup_header","evt","nextAll","docWidth","jHiddenDiv","divWidth","_autoHideGroup","opt_smallSized","collapse","jVisibleButtons","jButtonArrows","buttonArrowSelector","jAddedDiv","fixSvg","EVENTS","jGroup","jSmallItems","EXPAND","jHeader","filteredButtons","filtered","addBottomBorder","jBottomBorder","color","getWidth","fold","unfold","fitToWidth","hideNextSeparator","showNextSeparator","ReactToolBarGroup","extendedModel","_extendModel","buttonLabel","newButtonModel","foldMode","toolbarButtons","_buttonsByActionName","_buttonsByEnabledMode","_buttonsEnabledOnAttachmentSelection","_buttonsEnabledForMultiSelected","_buttonsEnabledOnlyForOneSelected","_jToolBarConatainer","toolGroupName","contentsActionEnabledMode","currentGroupSelector","byNameSelectorTemplate","jToolGroup","jExistingButton","currentButtonSelector","buttonClass","buttonTemplate","existingButton","getButtonsByActionName","getButtonsByEnabledMode","getButtonsEnabledOnAttachmentSelection","getButtonsEnabledOnlyForOneSelected","toolbarContentsSelector","toolGroupNameToAppendAfter","jToolBar","jExistingGroup","groupTemplate","groupHtml","jBeforeGroup","existingGroup","sideBarConatainerSelector","tabSelector","opt_current","jTab","cardFormTabTemplate","isNotBindedCard","_defaultClickHandler","Tabs","_tabSelector","_cardFormTabTemplate","_cardFormTabSelector","_cssClass","_jPlaceHolder","_jScroller","_jCardForm","_jAfterTabs","currentSidebar","_actualizeCurrentOnClick","_jSearchTarget","_jSideBarConatainer","_updateCurrentSelectedTab","_jSelectedTab","_currentTabSelector","_jExistingTab","_preparePage","_bindOpenHandler","currentTabSelector","_openHandler","targetTabSelector","currentTabName","noCardFormAtStartFound","wrapInner","nowSelect","CustomSearch","moreTabName","moreTabSelector","SideBar","_jSideBar","_fitHorizontalTabs","_fitTabs","_fitVerticalTabs","_getSideBarSize","sideBarSize","_getLastTabSize","sizeName","availableSize","_internalExpand","jSideBar","collapsedTabs","firstCollapsedTab","prevId","jFirstTab","_internalCollapse","_this2","moreTab","toggleClass","collapsedTabsLeftOffset","collapsedTabsWidth","windowWidth","jMore","lastTab","isVertical","moveSidebarToLeftColumn","jTreeArea","jLeftContainer","jTreeContainer","jExpandTreeContainer","jExpandHeaderContainer","jRightColumn","smallIcon","_moveSidebarBeforeCustomWorkCard","jMainContainer","jAttachment","jLeftColumn","attachmentWidth","marginRight","initSavedTextHeight","FolderTree","_containerId","_promise","initComponent","containerId","selectNode","nodeInfo","folderOptions","gridWidths","folderMode","hasFolderCover","nextPath","showCoverOnly","hasCoverOnly","markAsSelected","_findNode","prevPath","toggleNode","loadNode","openNode","_mapNodes","selectNodeByPath","fpath","triggerClick","currentPath","updateUnreadJobCount","forceUpdateCache","_findNodes","showUnread","_updateNode","folderPath","update","_getNodeContent","hasChildren","_findNodesWithFolder","getCurrentFolderName","setFolderVisibleName","updateFolderName","predicate","nodesPath","_findNodePath","childNodes","filteredNodes","changeFunc","React","constants","systemCode","onFail","ReactDOM","selectedNode","FolderPath","SelectedTreeItem","expanded","IsOpening","_buildFolderUrl","treeitem","_dialogId","_customDialogId","opt_dialogId","description","inlineHintPriority","inlineHintParams","showInContainer","showInDialog","dialogId","_updateContext","jDialogContent","_prepareHintModel","hintModel","_len","_key","templateParams","jErrorContainerPrimary","defaultContainerSelectors","jCurrentErrorContainer","ReactInlineHint","_BaseReactObject","extended","_createClass","SPIN_TIME_MS","SPINNER_SELECTOR","VISIBLE_SPINNER_CLASS_NAME","_class","jSpinner","_isVisible","timer","lastTimestamp","_start","showDelayed","_stop","_this3","timeDiff","animationStopTimeout","IsModalShown","jDialogSpinner","requisitesMixin","_createRequisite","reqData","opt_isDetail","opt_grid","REQ","Integer","Radio","CheckBox","BaseRequisite","_initRequisiteValues","reqsData","globalReqValuesInit","currReqValueInit","_reqValuesInit","_reqName","_bindMirrors","_isChanged","isRendered","_disableControls","_enable","parentTable","_enableControls","_disableReadOnlyFields","getRequisiteByControlId","reqI","controlsIds","RequisiteCollection","toDictionary","resultDict","BaseTableLine","_parentTable","_isDisabled","_disable","_makeFullName","newRowNum","ROW_NUMBER","TableRow","_rowID","rowNum","rowNumReq","requisitesData","_jDataItems","_getActualValues","modHiddReqs","hiddReqs","fullReqName","reqNameParts","getRequisites","reqVal","TableColumn","_isSystem","_isCanGUIRead","IsSystem","IsRendered","setCanGUIRead","currentRow","parentGrid","ADD_ROW","DELETE_ROW","ColumnsCollection","colsData","_createTableColumn","newCol","RowsCollection","rowsData","rowsInit","_addRow","parentTableSelector","_deleteRow","_currentForm","_columnsMetadata","_gridColumnsMetadata","parentTabName","_hasPendingOperation","_objectLink","_objectView","_uid","_initRows","tableRows","_initColumns","getColumnsMetadata","fieldName","_makeRowsData","_makeEmptyRow","opt_row","mapObject","columnMetadata","gridColumnMetadata","columnRequisiteName","row_id","requisiteMetadata","rowsMetadata","activeCell","columnsMetadata","_updateRowID","oldId","newId","deleteItem","getRows","resultRowsByName","rowI","_getGeneratedRow","isBuilderEventsSupported","opt_requisiteValues","newRowNumber","_getNextRowNumber","_sendRequest","reduce","reqValue","CmdCode","COMMAND","Section","lastRowNum","exisitingRows","RowData","_appendNewRowToDataView","currentRequisite","tableRow","sourceRowId","_tryToDeleteRow","existingCommand","bindOnRowRequisites","colNames","setUntouched","CHANGE_TYPE","REQUISITE_CHANGE","DETAIL_ROW_INSERT","DETAIL_ROW_DELETE","PICK_VALUES_CHANGE","FORM_CONTROL_CHANGE","FORM_REQUISITE_CONTROL_CHANGE","ACTION_CHANGE","REQUISITE_GUI_CHANGE","CONTROL_TYPE","TABLE","REQUISITE","INPLACE_HINT","HYPERLINK","MULTISELECT","WEB_BROWSER","DETAIL_SECTION_REQUISITE","Form","_calcServiceCall","_fillRequisites","isInitialized","_bindCalculation","_getRequisiteValueDependsOnOptions","getType","dateTimeFormat","isShowTime","onlyValue","opt_options","useRowNumber","withoutTables","transformMultiReqsToDetailRows","reqControl","refSelectInstance","currentValue","detailIndex","currentValueArray","multiReqNames","rowIdentifier","_iterator2","_isArray2","_i2","_ref2","rebindRow","rowRequisites","rowRequisite","_bindRequisiteCalculation","rebindTable","cardRequisite","RequisiteValue","_showSpinner","RequisiteName","resp","isCalculationDisabled","_hideSpinner","_applyRequisiteChanges","_applyPickValuesChange","_applySectionsChange","_applyFormControlChanges","_applyActionChanges","_applyRequisiteGuiChange","_applyMultiSelectRequisiteChanges","_applyGuiChangesCallback","guiChanges","CanGUIRead","CanGUIWrite","currentRecord","isRequisiteEnabled","actionChanges","IsChecked","controlChanges","isControlEnabled","TextColor","BackgroundColor","currentControl","jRequisiteConrol","jColoredArea","filteredTabs","ControlType","currentChange","currentDetail","currentDetailTables","_iterator3","_isArray3","_i3","_ref3","formDataRequisiteName","formRequisite","newDisplayValue","formDataRequisite","_unTouchRequisites","_iterator4","_isArray4","_i4","_ref4","_updateFormData","_iterator5","_isArray5","_i5","_ref5","_iterator6","_isArray6","_i6","_ref6","_iterator7","_isArray7","_i7","_ref7","isMultiselect","First","Second","oldVal","Items","DisplayText","_this4","mapRowIdTmp","sectionRowMap","sections","detailSectionNumber","addedRow","disableHidePreviousInlineHint","_highlightRequisites","reqsStr","_unHighlightRequisites","_saveExtended","needShowError","isCommited","_saveData","_this5","_updateModel","_fillRowsID","appendedRecords","_this6","rowNumber2IDs","RowNumber2ID","_iterator8","_isArray8","_i8","_ref8","rowNumber","newRowIDs","ApendedRecords","_loop","section","tempID","realID","_iterator9","_isArray9","_i9","_ref9","needApplyChanges","isJSON","CardHeader","AdditionalCardFormResult","ListItem","isTableItem","_setupBindings","jCheckboxObject","showBindIcon","CustomWorkListItem","removeUnreadStyle","addUnreadStyle","isUnread","_jMainContainer","_getType","objectSelector","_items","_isTable","_selectedItemsCache","_getItemsElementsInTable","searchTarget","getFilteredItems","filterSelector","filteredItems","removeItems","linkKind","elementKind","needUpdateTree","selectAll","setCheckedForFilteredItems","selectItemByID","deselectAll","toggleAll","jCheckedItemsLength","executeContentAction","folderLink","jItemCheckboxes","currentItemIsChecked","lastItemId","_getItemIdByjObject","_onItemSelected","_onItemsChanged","FolderList","maxItemsCount","likeFilterValue","likeFilterRequisites","predefinedFilter","sortIsAsc","isShowFolders","setPredefinedFilter","isPredefinedFilterEmpty","setSort","isObject","getSort","likeRequisites","currentScrollTop","jFolderItems","pageHeight","shownPage","getCurrentViewFolderMode","pageNumber","pageCountToLoad","needUseFilters","needUseSort","afterLoadCallback","loadFolderContent","_loadAndInsertNewPage","itemsToLoad","onclick","folderOrFilter","emptyMessage","opt_itemsToLoad","opt_needUseFilters","opt_needUseSort","newQueryParams","ctrl","filterReq","uid","currentQueryParams","setIsShowFolders","ObjectsTable","_selectedItems","main","enableCheckBoxOnItemsSelect","_setGrid","_slickGrid","_slickGridDataView","itemData","__name","__code","selectedRowIds","getSelectedRowIds","newSelectedItemsData","rowIdStr","selectedRowNums","_raiseOnSelectEvent","getSelectedRows","getIdxById","invertSelection","allItemNums","newSelectedRowNums","lastSelected","_isCalculationDisabled","_isCommited","_referenceViewName","_allControlsInit","opt_parent","_type","_bindUnHighlightOnChange","_raiseInitEvent","unHighlight","referenceViewName","isString","disableCalculation","enableCalculation","_bindControlEvents","reqFullName","_fireChange","opt_ev","jLabel","_getLabelForControl","jC","opt_jControl","_getControlValue","controlName","_setInvisibleValues","opt_displayValue","_disableControl","_enableControl","opt_NeedTriggerResult","jReq","jReqIcon","reqObj","jReqInput","opt_color","opt_speed","speed","blink","colorLuminance","hex","lum","rgb","borderColor","prevBorder","reqSelector","_getJElementForHighlight","reqChild","reqRef","fakeInput","dictionary","sbrteControlName","AFTER_CHANGE","onControlInitComplete","jCustomControl","opt_leadRequisiteValues","jHidden","controlInit","_fireObjectSelectRequisiteChange","setData","changedData","requisiteData","jHidd","leadRequisiteValues","getFilter","refSelect","_setControlsValues","_updateNewValues","updatedNewValues","withoutDisplayValues","addValues","currentValues","_addValues","allValues","unique","clearReferences","oldRefs","newRefs","ROUTELASTOBJS","DisableSpecialProcessing","valuesToBeSet","entry","baseSetValue","requisiteReferenceInstance","isCheckbox","_isCheckBox","_isEditable","jDisplay","_getCheckBoxControl","ddInstance","cardFormControl","isCheckBox","_applyControlMethod","opt_isDisabled","jControlValue","isNull","getSelectedValue","newLink","editModeMixin","_filters","_filter","_pickValues","_references","_customAction","_mainReference","_lastReferences","_lastValue","_isChangeFired","_bindGridEvents","_reInitControls","setFilters","refName","isActive","editorActive","updateItem","_cellStyle","_grid$grid$setCellCss","cellStyle","_cellStyle2","_grid$grid$setCellCss2","setCellCssStyles","rownNum","flashCellById","_addLastObjectsPseudoReference","_bindReferenceGridDialog","curCol","_clearPick","_useTable","_jTables","useTable","getRecords","opt_tableName","CELL","CELL_WITH_MENU","DATA_ATTR","COLUMNS","SECTION_NUMBER","BUILDER_EVENTS_ENABLED","COLUMN_AUTO_WIDTH","gridInstances","_detailsSelector","_dv","_jDetails","_cellMarkUp","_templates","_contextMenuMarKUp","detailsSelector","ContextMenuClass","cellMarkUp","contextMenuMarkUp","cellWithMenu","_initializeGridInstances","isSideBarBindEventBeforeTab","columnAutoWidth","_getExtraColumns","isBuilderEventsEnabled","DetailSectionNumber","sortedColumns","getCellTemplate","columnDef","dataContext","_contextMenuMarkUp","valueId","openCardButtonTitle","cssClasses","attributes","data-recid","contextmenu","stateVariable","detailName","_getAvailablePlugins","disableOnResizeBinding","config","align","showMessage","opt_sticky","opt_duration","sticky","actionButtonSelector","_jActionButon","_buttonChangeEvents","_groupChangeEvents","basePageElementEvents","groupModel","currentGroup","_bindOnGroupChangeEvents","currentButton","_bindOnButtonChangeEvents","_extendGroupCollection","_extendButtonCollection","getIsHidden","_hasExpandedButtons","_lowestPriorityGroup","condition","priorityCriteria","Infinity","resultGroup","_findOrCreateGroupMore","groupMore","GROUP_MORE_NAME","minimizedGroupIcon","_hasButtonToMove","isMoved","_toolbarMoveOneButton","_compactGroup","_reduceGroup","toolbarRestore","buttonIndex","changeEventName","_dispatchChangeEvent","createGroup","addGroup","removeGroup","removeAllGroups","_getGroups","removeButton","removeAllButtons","_getButtons","_unbindFromButtonChangeEvents","currentGroupModel","isButtonExist","newGroupModel","indexToPaste","isGroupExist","getButtonsLength","getGroupByName","getGroupsLength","_unbindFromGroupChangeEvents","isFounded","ToolBar","_resizeToolbar","createResizeEndEvent","mouseup","groupContainer","_shrinkedButtonsAfterResize","_restoreToolbar","_getNextButtonWithCaption","buttonWithCaptionInLowPriorityGroup","toolbarGroups","groupPriority","buttonWithCaption","jToolbar","resizeToolbar","jToolbarContents","_getAvailableWidth","_canFitToWidth","toolbarWidth","availableWidth","ActionButton","childComponents","bindChildEvents","shouldResetScroll","forceRerender","component","_childComponents","componentEventChangeState","unbindChildEvents","updateModel","unbindEvents","_requestModelData","requestUrl","requestParams","updateHistoryTable","historyModel","isAllRowsDisplayed","sortHistoryTable","sortingColumnId","sorting","rowsCount","sortingDirection","tableColumns","follower","second","datetime","dateParts","reverse","hoursAndMinutes","transformDatetime","toogleFilterPanelButton","ToggleStateTreeFilterPanel","isFilterPanelVisible","toggleStateTreeFilterPanel","_resetScroll","toolbar","restore","collapseOneButton","toolbarCollapseOneButton","jobStates","stateTab","getStateTree","getExtendedProperties","activeFilter","applyFilter","isIe","processedContent","aside","CardTabMainTab","tasks","bindButtonsEnabling","isNewModel","reactRender","Component","getElementById","_firstRender","_scriptsAlwaysEvalAft","_scriptsEvalAfterRend","_scriptsAlwaysEvalAft2","_scriptsEvalAfterRend2","scriptsEvalAfterRender","scriptsAlwaysEvalAfterRender","InitSavedTextResize","jAttachmentItems","attachmentItemNode","jAttachmentItem","initSelectStandardRouteButton","dragging","initEvents","contentJustReceivedFromServer","_extractScriptsFromHtml","serializedTabData","_serializeCardForm","_serializeAttachments","extendedProps","initCustomWork","_initCustomWork","currentSerializedTabData","shift","opt_container","jMain","jMainFormValues","jHiddenFormValues","attachmentsData","attachmentInfo","sourceHtml","scriptTags","regexForScriptTags","resultHtml","CardTabStateTab","_currentId","_currentKind","getKind","_jobStates","_initTreeRecursive","_toggleCollapseTreeNodesRecursive","_markAndExpandCurrentNode","_shouldScrollToCurrentNode","initTooltips","_scrollToCurrentNode","uniqueId","_currentNode","isExpanded","isNodeExpanded","_currentNodeParent","_isCurrentNodeHiddenByFilter","_applyFilterToNodeRecursive","stateTree","isNodeCompletelyHidden","isExpired","isRead","jCurrentNode","currentNodePosition","currentNodeTop","CreatePanel","button_model","_initButton","button_name","MassCreateDocument","_global$BaseDialog","fileList","dialogSelector","fData","file","XMLHttpRequest","onreadystatechange","readyState","rnd","send","Files","FavoritesFolderID","Header","childObjects","ExplorerHeader","Current","_onPopupListeners","FullName","login","Organization","organization","onpopstate","isTable","recID","unescape","refView","2","3","9","typesKinds","initCreatePanel","initHeader","createPanelData","createPanel","initToolbar","_renderToolbar","headerDomElement","addOnPopupListener","objectModel","initCardTabChildren","_selectCardTab","openReactTab","tabType","forceReload","tabElement","currentHelpLinks","BindHelpIcoClick","tabsToEnable","parsedModel","Window","_isOnBeforeCloseExecuted","_closeCheckerTimeoutHandlers","nameLowered","_bindOnBeforeClose","_bindOnAfterClose","_getWindowOpener","_startWindowCloseChecker","_unbindOnBeforeClose","_unbindOnAfterClose","closed","_clearAndDeleteCloseCheckerTimeoutHandler","frameElement","childWindow","onCloseFunc","childWindowName","_runCallbackIfClose","NeedUpdateOnChildClose","openExplorer","jLikeFilter","predefinedFilters","FilterEDMSContent","reloadParentExplorer","reloadParentGrid","op","formChanged","updateExplorerContent","updateParentExplorerContent","debounceInterval","requestInterval","stackSize","_eventTimestamp","_queueTimestamp","_ignoredActions","_ignoredAreas","HTMLelement","opt_actionTarget","eventParams","_getParams","Action","stat","eventQueue","tagName","actionAndArea","dateNow","Target","_getTargetAndAreas","writeQueue","_getActionAndAreas","Queue","areas","Area","returnFirstOnly","_getAreaFromElement","cName","cNames","areaElement","actionAndAreas","scripts","reports","folders","jobs","documents","eDocuments","BaseFactory","getObjectByID","opt_modelType","_handleModel","proxyCall","objectInfo","getRecordByID","openInModal","newSettings","createRecord","opt_ourFirmID","opt_paramVars","paramVars","opt_environmentVars","envVars","environmentVars","bindTo","ourFirmID","ReferenceFactory","openReference","referenceModel","opt_isModal","componentCode","Script","execute","createRequestModel","requestModel","webAccessClientClassName","showDialogAndExecute","getObjectByName","dialogActionName","Report","_execute","referenceRecord","integratedReportRefereneceRecordId","integratedReportRefereneceCode","BEFORE_EXECUTING","guid","deprecatedObject","download","openByAgent","Repository","DownloadTool","loc","transformMultiselectToDetailRows","executeIntegrated","isModal","_showDialog","report","showDialogAndExecuteIntegrated","ABORT_FILLING_PARAMS","queryParamsAndExecute","_queryParams","queryParamsAndExecuteIntegrated","ReportName","_queryParamsFromXml","opt_referenceRecord","serializeForm","getReportByName","getReportsByUnitName","moduleCode","UnitName","showReportsByUnitName","opt_moduleName","opt_width","opt_height","ReportList","InboxFolderID","OutboxFolderID","CommonFolderID","getRootFolderID","folderType","getFolderByID","createFolder","opt_name","FoldersFactory","TasksFactory","getTaskByID","createTask","parentLink","SearchFactory","showResults","JobsFactory","DialogsFactory","_getObjectBy","getObjectByInstanceID","getDialogByID","getDialogByName","getDialogByInstanceID","attrName","attrValue","getDocumentByID","createNewFromTemplate","typeCode","kindCode","templateCode","EDocumentsFactory","DomainConstants","_ourFirmsConstants","g_SharedPublicConstants","g_OurFirmsPublicConstants","getOurFirmConstant","firmId","isLinkModel","__type","isLinkModelArray","isDateArray","parseMethodResult","methodResult","linkArray","dateArray","entityId","factory","variantParameterFactory","variantParameters","parameter","methodParameters","VariantParameter","getVariantTypeFromLinkType","linkType","getVariantCollectionTypeFromVariantType","VariantParameterFactory","сreateVariantParameter","сreateVariantParameterFromBoolean","сreateVariantParameterFromString","сreateVariantParameterFromObject","сreateVariantParameterFromNumber","boolean","сreateVariantParameterFromDate","parameterType","parameterValue","setActionResultAndExecuteAgain","setContentActionResultAndExecuteAgain","setDomainActionResultAndExecuteAgain","filterRequisite","cmds","Commands","performCommands","ViewName","CommandNumber","CommandType","CommandResult","commandsResult","allCommandsRunner","cmdType","cmdNumber","allCommandsQueue","performShowDialogCommand","performEndCommand","performExecuteSeachCommand","performExecuteJsActionCommand","performShowMessageBox","performShowNotification","cmdResult","showDialogParams","actionResult","__RESULT","SearchContentKind","SearchResult","argsExpression","actionArgsArray","parsedActionArgs","jsActionArgs","jsActionName","asyncResult","returnRowNumber","lastWindowWidth","namespace","ns","callbackIfExist","InitKeyNavigation","maincont","IsListExist","hovered","IsPageUpDown","ArrowKeyNavigation","IsDownPressed","GetScroller","newNext","oldnext","CheckHovered","maincont_h","next_h","next_top","jHovered","nameCont","toCheck","OpenBounds","PerformDefaultAction","KeyboardActionWithLink","toolBarBtnSelector","toolBtn","miniToolbarBtnSelector","needCheckIsListExist","functionText","OpenCard","openCardLnk","SaveCard","shortcutBind","shortcut","actionname","DeleteSelectedRecords","SelectAll","CloseTaskWindow","CloseBaseJobWindow","CloseWizardWindow","confmsg","wizardKey","BaseCloseDocWindow","ShowTopSpinnerMessageIfVeryLongQuery","showTopSpinnerTimer","dlg","CloseJobWindow","inModal","instant","ShowAllRows","MakeHref","pagename","utf8_decode","aa","bb","ShowAllRowsPostback","MakeHrefsFromLinks","GetPageNameByKind","g_WebServerName","incScroll","side","scrollTimeout","deselect","opt_withoutAttachments","CreateTaskTM","CreateFromTemplate","CreateNewDocument","CreateFromTemplateOrFile","BindToRecord","RecordID","RefName","CreateFromFile","UnBindFromRecord","DeleteAll","sourceFol","ShowFolder","HeaderText","IconAlt","FindParam","aoData","ShowReferenceRecords","ShowReferences","refview","linkData","Reference_CreateRecord","fillreq","afterCreateCallback","parentParam","parentReq","IsUseOurFirm","firms","GetAllOurFirms","SetOurFirmID","CreateOurFirmSelectForm","firm","pickRequisites","useOurFirm","NewRecordService","OurFirmID","FirmID","RequisiteValuesJSON","EnvironmentVarsJSON","ParamsJSON","customTitle","currentCaption","ShowAddRegion","isDoc","tdAdd","added","helper","LoadAddRegion","ChangeUnreadCountInTree","td","MakeReadedWhenClick","DocShowAddRegion","wopenf","withoutmenu","screen","availWidth","availHeight","oWindow","oSize","alert","g_ErrMes","UnlockEDoc","LockEDoc","SaveInJob","SaveAndCloseJob","AcceptContolJob","g_LeadJobID","g_ConfirmParam","Content","$dialog","SaveInBaseJob","Job_SetFocusToEditText","Num","ReferenceCard_ShowDefaultTab","CancelStandartRoute","Reference_IsDisabled","Reference_GetPrefix","SuccessCallback","isAutoSave","getNewRecordName","Reference_GetName","Reference_GetView","Reference_GetRecordID","decodeURI","Reference_Save","setOpenersRequisite","Reference_SaveAndClose","Reference_ForceUpdateRequisitesFromDatabase","Reference_CopyRecord","Reference_ContextMenu_Delete_OnCreate","Reference_ContextMenu_Delete","Reference_ContextMenu_Copy_OnCreate","confirmDialogMessage","SourceRecordID","Reference_CopyRecord_ToolItemClick","BaseCloseRecordCard","FreeRecord","CloseFolderCardWindow","notInExplorer","RemoveParamsStr","MakeActionListItemHyperlink","SideItem_Click","nameLink","currentDefaultAction","StartAction","DoDefaultAction","isSearch","needDisableAgentSetts","ExpandCollapseButtonMouseDown","SetExpandCollapseButtonImage","ExpandCollapseButtonMouseLeave","DestImageType","ArrowImages","RemoveAllCircleArrowClasses","reg","StyleName","ChangeItemExpandCollapse","sub_divs","ShowObjectCard","GetObjectCardUrl","OpenFolder","newFolderPath","fpathParam","folderTitle","hasCover","SendAsAttachment","routecode","subject","attach","setSubject","ShowInsideFolders","onload","lowerKind","ShowAttachedToTasks","ObjCopyLink","lrList","CurrentActionHTMLElement","GetCryptoObject","CacheKeepAlive","cache_id","Key","OpenReference","SearchGUID","UniqueID","ExitBtnClick","callbackFunc","InitTheme","setDefaults","newLang","getSelectedLang","ViewPreviewSettingsModal_DisableControls","ViewPreviewSettingsModal_ChangePreviewSettings","radio","ReloadWindowToLoadPlugin","RegisterUserMenuHelpItem","g_UserMenuHelpItem","lastCount","isIntegratedSearchMode","GetTotalRowsCount","isError","okFunc","bgClass","clearAllModalDivs","errHTML","okClick","ConfirmDialog","AppendDialogHelpIcon","InstructionResize","$ins","CreateDatePicker","clientId","cntl","isClosing","beforeShow","inst","onSelect","needTriggerChange","$input","dateText","showOn","showButtonPanel","datetimepicker","SetValidDate","TT","timeArr","CheckPeriod","dPO","idPO","CopyInfoToClientBuffer","nodeName","msgType","ShowModalWindow","executeAndCloseFunc","handlerExecuted","errMsg","MakeWarningMessage","MakeErrorMessage","shownMessageType","warnMsg","infoMsg","showInformation","showButtons","hideReferenceDropDown","drag","dragStart","needShowButtons","cnt","afterOpen","eDocId","needLock","needExport","transform","toEsd","withOnlyApprovingSigns","openPreview","GetPreviewEDocUrl","doc_id","ver_num","explock","transformName","needShowSpiner","fileLink","LockDocument","TransformationName","ToEsd","WithApprovingSigns","spinnerDelay","setSpinnerDialogDelay","isIOS","useFullScreen","g_isFullscreenPreview","hideLock","openRead","OkFunc","showLock","decryptKey","needShowWindow","AgentCallback","ExportEDocNow","modalWindow","verNumberCheckedRadio","requestAnimationFrame","verSize","transformationsPick","UpdateExportDialog","jExportWithOnlyApprovingSignature","ShowLock","IsExport","ShowTransformations","DecryptKey","jExportToEsd","ExportEDocToolBar","getDecryptedKey","lock_label","decryptedKey","CheckLock","ImportEDocNew","verNum","ImportEDoc","helpContextId","g_import_btn","checkFileSize","GetImportModeSettings","isPressed","isImporting","DisplayMode","successText","ImportEDocNewToolbar","emds","DoIt","getDocumentDecryptedKey","Callback","Pass","ShowMessageInDialog","currentState","allowCreateActiveVersion","isFileSizeAccepted","EDocKind","importEdocId","kindName","jEDocTr","IsImporting","AllowMultipleActiveVersions","CheckAllowCreateActiveVersion","CountActiveVersions","CheckVersionAllowLock","unlockDocLabel","unlockDoc","allowLock","radios","CopyEdoc","source_id","jModalWindow","popup","validForm","pleaseWait","windowName","InitCreateNewDocumentControl","lastWnd","showReportDialog","ReportError","$file","req_id","myDateSort","dataTableExt","oSort","analit","ConfirmDelete","files","fileSize","ReferenceOpen","viewname","MaxRequestLength","WizardExecute","sys","InitFolderCover","IsWebAccess","TMExecute","iframe","ComponentExecuteInNewProcess","jFiltrationPanel","iframe_wnd","defineProperty","changeCoverStylesImages","jFrame","jFrameContents","parentWindow","jFrameHead","imagesPath","rel","InsertRouteSchemaImage","RouteSchemaPath","showHints","ContextMenuCheckAll","SetStandardRoute","showRouteModal","showObserversModal","threeDotsDiv","ico","isExplorerAboutIco","menu_items","lastUrl","_lastUrl","UpdateModalWindowExtHelpLinks","newLinks","versionName","currentVersion","isForEdit","ViewOnDesktop","OpenWithAgent","Lock","jDoc","jDocIcon","jUploadIcon","setDownloadInProgressStatus","removeDownloadInProgressStatus","checkDocumentHasLocalCopy","AskForActionOnDocument","SendEDocToAgent","GetEDocumentObject","docObj","ExportEDoc","selectedVerRadio","canExportWithLock","AskOpenForView","GetDocID","EnableLock","GetCurrentVersion","lock","Versions","VerNum","RequestTokenAndContinue","isPreviewSupported","hrefForExport","formatSupported","OpenEDocForView","OpenDoc","Operation","GetAgentOpenDocRequestParamsObject","clearPluginCache","RequestTokenCallback","verIndex","observetype","ClientName","Editor","EditorCode","ProcessResponse","CloseObservingType","secure","ShutdownAgentSession","selectToolbarBtnOnShowContextMenu","OpenEDocByAgent","ReplaceWizardLinks","wizardLinkRegExp","migration","checkNotifications","initAboutMenu","AfterSearch","initViewSwitchingMenu","initExtensionsMenu","initPreFiltersMenu","initTabs","cards","initResizablePreviewCard","bindButtonsEnablingOnFormChange","initColoringRecordsSettings","initAutoCleaningSettings","QueryInstanceId","fitDialogOverlayToPage","treeWidth","MIN_WINDOW_WIDTH","MIN_WINDOW_HEIGHT","h1","offsetWidth","h2","scrollbarHeight","clientWidth","setMainColumnsHeight","applyExtraZoomForSurface","resetZoomForAndroid","reset","jMeta","resetZoomForIpad","denyScale","allowScale","overflowY","jContentContainer","iframeHeight","setExplorerLayout","inIframe","appHeight","isWindowSmall","jHtml","jBody","QFilterHeight","toolbarPanelHeight","jFiltrationArea","jFolderCover","setReferenceRecordsContainerHeight","oldWidth","oldHeight","fullHeight","setDocumentPreviewHeight","adaptiveRules","jOverlay","lastWindowHeight","isRightButton","lockUnlockRunning","EDocument","EDocumentClass","el_name","CopyDoc","islocked","LockUnlockOnCreate","GetLockUnlockText","EnsureVersions","currentVersionNumber","GetActualVersionNumber","versions","handle","GetVersions","UpdateVersions","GetContextMenu","FirstValidCertificate","SignVersion","GetVersionByNumber","SetCurrentVersionNumber","GetVersionLockImage","imgHTML","IsLocked","ShowAllVersions","LifeStage","OpenRead","localCopiesCount","OpenEdit","isShowPreview","Import","ReturnDoc_CanClick","ImportVersion","doAction","ReturnDoc_CanClick_Reason","_SignVersion","cert","dc","certObj","GetCertificateFromStorage","VersionNum","NeedLock","WrapToShowErrors","SubstUser","Sign","SignStr","signResult","IsSubstituted","UserCertificateStr","CreateVersion","CreateVersionToolbar","EDocumentVersion","EDocumentVersionClass","ReturnVersion","OpenForEdit","LockUnlockVersion","SignEDoc","Delete","CanChange","DBLock","LockedByUser","LockTime","SetState","IsLockedByMe","ChangeCountActualVersions","CurrentLifestage","ChangeNote","executeDefaultAction","eDocVersion","SendVersionToAgent","JobClass","MarkAsReadOnCreate","MarkAsRead","unread","IsRead","regionalSettings","selectedLangSelector","setNewLang","setLanguage","cancelNewLang","lastTotalCount","lastIsFiltered","isFiltered","ShowRowsCount","addCount","secondText","messageHtml","make","CreateMessageHtml","availableTransformationNames","DocumentId","iframeNode","isOpera","ShowReport","opt_reportCaption","executeFunction","InitReportParams","fillHiddenParamsCallback","GetParamControl","GetParamValue","required","getIframeDocument","hFrame","ShowReportWithoutParams","divDebug","SetEditorAppFromFile","z-index","opacity","outline","globalCore","showEnableInstruction","needShowInstruction","needShow","requestName","checkSessionState","isSessionError","RunWithAgentDialog","_getPlugin","showDialog","pluginObj","defForSession","isSessionRegistered","beginSession","isStarted","checkStateAttemptsLimit","checkUpdateState","updates","getUpdateProgress","ON_UPDATING","checkAgentInterval","AFTER_UPDATING","clearInterval","_initSession","AFTER_UPDATING_RESTARTED","completeAction","WaitAgentRunDialog","CHECK_STATE_INTERVAL","errCount","ON_FAIL_UPDATING","checkUpdates","BEFORE_UPDATING","setSessionInitialized","_initAgentUI","agentNotStartedWidget","_startAgent","_updateAgent","cancelStart","downloadRpmPackageButton","downloadDebPackageButton","contains","initializeAgentSession","isDisableSetted","canUseInCurrentDevice","g_IsAgentEnabled","beforeUpdating","afterUpdatingRestarted","BUTTONS","WITHOUT_AGENT","PING_SUSPECT_FAIL_TIME","PING_MAX_TIME","agentAction","_agentStartTimeoutID","_agentStartFailTimeoutID","_waitDialog","_clearCheckAgentTimers","_initButtons","_initDownloadLink","_initUpdateHandling","_disableAgent","_initCheckAgentTimers","AFTER_DOWNLOAD","_beforeUpdating","progress","_onUpdating","afterUpdating","_afterUpdating","onUpdating","_onFailUpdating","onFailUpdating","timeStamp","_unbindUpdateHandlers","disableButtonWaitState","RUN_AGENT","PING_INTERVAL","awaitingText","_agentStartTimerId","_initRunWaitHandling","awaitingTextHtml","AFTER_START","header","_iw","_jo","_preInitObjects","oldImage","jAbout","initSettingsMenu","usersRefCode","userId","hasHint","adjust","jUsername","updateTab","tabGiven","previousTab","SB","jCardFormTabs","jSelectedTab","jTabItem","dtTables","setOrientationCookie","isNeedInvert","setHorizontal","setVertical","WITHOUT_FILTER_NAME","onSelectFilter","jFilters","statusesMenuItems","menuItem","baseMenu","jSelectedItemText","iconSymbol","menuSelector","allFilters","selectedFilterName","IsHidden","statuses","Icon","Tooltip","statusesMenu","getHoverIconCssClass","defaultDirection","OFF","isAsc","sortItemOnClick","clickedItem","jSortText","jSortIcon","setSortByMenuItem","sortIcon","searchModes","getSourceId","enableDeleteButton","toolItem","deleteLinkFromCard","folderTab","pasteToFolder","_createTask","taskTab","handled","$list","enableButtonOnItemsSelect","allItems","enableButtonOnItemsSelectGt","jCheckAll","processFirstSelectedItem","processCurrentObject","enableObjectCardBtn","searchName","TOOLBAR_ACTIONS_WITH_OBJECT_GROUP","openObjectCard","copyObject","enableButtonForDocOrRefRecord","kindLowered","openObjectHistory","showAttachedToTasks","showInsideFolders","showBoundDocuments","sendAsAttachment","openFolderContent","folderContentUrl","isSelectedSecondLevelInRelationTree","enableCutAndDeleteLinksBtn","isSelectedSecondLevelItem","enablePasteLinksBtnOnFolderChange","enablePasteLinksBtn","currFolIsReadolny","pasteBoundsInTab","deleteBoundsInTab","enableSendAsTaskAttachment","FolderType","createAndAttach","docUrl","enableButtonOnObjectTypeSelected","objects","availableStatuses","statusNameInClassRX","getStatusIconByStatusName","opt_normalClean","toolItemEl","afterChangeCallback","isForList","massSetUserStatus","succFunc","updateStatusInList","statusEl","showStatusContextMenu","userStatusMenu","getUserStatusMenu","openStatusContextMenu","openStatusContextMenuForList","getStatusOfItem","itemEl","statusButtonForListOnInit","isSelectedOnlyReferences","getStatusNameForItems","elStatusName","showHorizontalStatusContextMenu","generalMenu","menuIconEl","menuitems","itemsStatus","imageCSSClass","menuId","oldOnShow","margin-bottom","SetCurrentPeriod","onPeriodSet","CURRENT","PREVIOUS","SLIDING","CUSTOM","MONTH","QUARTER","YEAR","uniqueID","CURRENT_PERIOD_LENGTH","styleClass","previousPick","previousPickData","lastDays","lastDaysHtml","beginDateData","endDateData","currentPickLabel","currentPickHtml","previousPickLabel","lastDaysLabel","lastDaysLabelEnd","periodLabel","endDateLabel","endDateHtml","previousPickHtml","beginDateHtml","beginDateLabel","Previous","LastDays","getIsChanged","EndDate","setType","BeginDate","period","PeriodType","PeriodLength","CURRENT_PERIOD_TYPE","formType","Period","AsString","days","setCurrentPeriodService","PerionBegin","PeriodEnd","CurrentPeriodType","CurrentPeriodLength","Location","onPeriodSetCallback","createCurrentPeriodFilterMenu","opt_needDisableChangeCurrentPeriod","jButtonSelector","isCurrentPeriodRequired","needDisableChangeCurrentPeriod","cm","appendCurrentPeriodInPageTitle","jObjectName","serverBegin","serverEnd","selectFilterButton","toggleFilterPanel","selectUseArchiveDataButton","RefView","enabled","toggleUseArchiveDataPanel","selectGroupButton","toggleGroupPanel","selectVisibleColumns","newVisibleColumns","enableDeleteRecordBtn","hasRights","enableCopyRecordBtn","DeleteRecord","CreateCurrentFilterMenu","contextMenuElementSelector","SetCurrentFilterState","PeriodSetCallback","getReferenceContext","ExportRecords","initPerformButton","performResults","performResultsInit","choices","getAll","DisplayName","additionalSettings","perform","_checkAttachmentAccessRights","JobId","_setAccessRights","CheckIsWf","ResultNotEmpty","_requestAskableParams","_executeBeforeQueryParamsEvent","performJob","hasAskableParams","performResultCode","getByCode","resultEl","LeaderJobID","_showLeaderJobPerformDialog","jobID","activeText","jActiveText","PerformResultName","newActiveText","performResultIndex","ShowAskableParams","querySelector","performResultName","resIndex","_clickOnResultParam","jobPerformResult","contentFilterTimeout","jFastSearch","switchView","filterAreaWidth","checkAllWidth","currFldWidth","filterDropdownWidth","regionID","resetFilterInputWidth","onFilterInputKeyDown","clearButton","updateFolderListItems","updateFilterInputWidth","onFilterInputKeyUp","jCurrentFolderArrow","jCurrentFolder","toogleCurrentFolderArrow","globalFooter","AgentNotStartedWidget","onStart","onDownload","_afterUpdatingRestarted","TITLE_TEMPLATE","CONTENT_TEMPLATE","OpenedDocumentsWidget","_requestGetOpenedDocuments","_startGetOpenedDocumentsTimer","intervalInSec","getOpenedDocuments","_prevDocs","doc","IsObservable","getOpenedDocumentsListComponentHtml","titleHtml","wrappedContent","jOpenDocumentList","dropping","droppable","jDroppbable","isfolderAcceptObject","associations","5","enableCopyButton","jObjectListItem","isCopyKeyPressed","onDropEnd","getTreeItemId","getTreeItemParentId","getDraggingLinks","jDraged","accept","recieverType","jReciever","getFolderType","hoverClass","drop","draggable","dragIsFromFolderTree","handleDrop","enableEscapeButton","isCancelKeyPressed","revert","filterLinks","getObjectName","removeSelection","moveLinks","attachToTask","OL","pastedCount","refreshAll","bindLinks","signListItems","sortedLinks","linkElement","signSortedLinks","signDocuments","isSignCustomWork","signCustomWork","jTokenPinMessage","showSigningUnsupportedDialog","tokenPinMessageHeight","tokenPinInputHeight","jTokenPinInput","newHeight","LinksTasks","LinksJobs","UseAgent","IsSignCustomwork","taskLink","SignTask","jobLink","SignJob","getSignedCustomWork","addTextFrame","jDraggable","overlayElement","overlaySelector","overlayInfoSelector","jDndOverlayInfo","refreshObjects","dropSetup","dragSetup","MaxVisuallyStackedObjects","jAttachedToCursorItem","cursorAt","createOverlay","jDndOverlay","TaskChange","dataTransfer","dropEffect","showCreateDialog","droppedItems","dirDropped","webkitGetAsEntry","isDirectory","fileNames","totalSize","dialogTitle","FileNames","mass","innerHTML","extensionInfo","baseCssClass","iframeCssClassHidden","iframeSelector","overlayCssClass","Preview","wrapperId","_jFrame","_urlHandler","previewHandlerUrl","documentData","convertedObj","preview","DataType","pageCount","convertedObjId","versionId","scriptFileName","cssLink","_onFrameLoad","_setToolbarControlsVisibility","errorType","_loadFrame","_hideOverlay","onResize","setVersion","_showOverlay","objectsData","PageCount","Id","selectedObj","initScaleInputValues","frameSrc","_prepareFreshlyLoadedDocument","postprocessor","docType","isText","wasMadeFromMsWordDocument","WordDocumentPostprocessor","BaseDocumentPostprocessor","ExcelDocumentPostprocessor","_documentHeadFile","_extension","_getAppropriatePreviewActions","WordDocumentActions","TextActions","isSpreadsheet","isMultipage","MultipageActions","ImageActions","toolbarControls","isImage","isScalable","fitToButtons","scale","rotateButtons","pagination","wordButtons","setScale","loadNeighbors","enableChangeTrack","setSelectedStateAndPerformAction","trackChangesVisibility","commentsVisibility","createEvent","initCustomEvent","overlayCssClassHidden","_isMultipage","_isImage","filePath","_isIpad","device","_addFilesToHead","_prepareContents","jFrameContentsHead","styleSheet","createTextNode","scrollerStyle","_global$BaseDocumentP","_openLinksToExternalResourcesOnNewTabs","_fixHttpLinks","_setBodyColor","_removeTabScroller","_onTabSwitch","jPreviewBody","jSheetFrame","sheetFrameBody","jScrollFrame","jTabsFrame","jFrameSet","jTabFrameBody","jDocBody","jExcelSheetFrame","frames","jAnchorTag","rebindPassthrow","jFrameSheet","getFrame","jFrameTabs","ImageDocumentPostprocessor","jImages","MultipageDocumentPostprocessor","jImage","naturalHeight","naturalWidth","asposeSelectors","comments","commentAnchors","commentArea","wordDocumentSelector","documentPageBaseCssClass","_wrapWordPages","_prepareComments","anchors","jContents","jStyle","sectionSizes","_getAsposeSectionSizes","jWrappedBody","asposeSection","mainContentCssStyles","sizes","commentsHtml","jComments","cssText","innerText","asposeSizeRulesRegex","pageRules","sectionNameRegex","sectionName","sizeRule","pageRule","sizesRuleRegex","jCommentAnchors","jCurrentComment","infoStr","infos","documentAnchorSelector","jDocumentAnchors","jCurrentAnchor","commentSelector","jPage","jCommentSection","jComment","jCurrentAnchorTop","jPageSection","jPageSectionTop","jCommentSelections","_commentHighlight","commentSelectionSelector","jCurrentCommentSelection","BaseActions","_initAttributes","actionUrl","_jFrameContents","movePreview","previewScale","_setScaleValueInDropdown","dropDownList","_createFullscreenUrl","returnUrl","concatSymbol","previewPageNum","previewAllowCopyText","allowCopyText","toggleFullscreen","_fullscreenUrl","printDocFromPreview","execCommand","print","PREVIEW_SCALE","FIT_HEIGHT","FIT_WIDTH","FIT_WINDOW","Directions","directions","_global$BaseActions","ImageDocumentPreviewSettings","_jImage","_jPlaceholder","_pageCount","_placeholderMargin","PLACEHOLDER_MARGIN","_imageInitialSize","_recalculateContainerSize","_containerSize","_rotatePages","_direction","placeholderMarginCssProp","shouldFlipHeightAndWidth","sizeDiff","margin","rotateCW","rotateCCW","_calculateScaleRelativeToContainer","_recalculateSize","_setScaleValueInDropdownAndButtons","isScaleAlreadySet","buttonKey","Map","turnOn","initSize","scaledImageWidthOverflow","cssMargin","sideMargin","cssTransformOrigin","holderBottomMargin","holderTopMargin","transformOrigin","totalHeight","frameBodyHeight","marginBottom","frameBodyWidth","marginLeft","_global$ImageActions","postInit","_pagesIterator","_jPageNumber","prepareFirstImage","scrolling","fillWithPlaceHolders","attachToFrameScrolling","_width","_height","jPlaceHolder","tmpHtml","jImg","handleCurrentPage","areaRect","jFrameParent","_documentElement","elementFromPoint","_documentElement2","pageNum","bindOnLoad","getURLForPage","rotate","neighborsCount","jumpToPage","offsetTop","goToPreviousPage","_scaleKey","placeholderMargin","bottom","goToNextPage","tmpWindow","contentDoc","bodyNodesArr","primaryImg","imgSrc","innerNodes","innerNode","imagesOuterHtml","spinnerText","customHTML","SpreadsheetActions","commentAreaWidth","TextDocumentPreviewSettings","_body","_zoom","zoomValue","jScaledContent","marginTop","_zoomValue","sourceWidth","maxPageWidth","jWordDocumentPages","commentsWidth","jCurrentPage","currentPageWidth","viewportTop","documentWidth","viewportWidth","jDocumentPage","jPageTop","jPageBottom","viewportBottom","pageWidth","deletedText","insertedText","_global$TextActions","enableTrackChanges","disableTrackChanges","enableComments","shouldMovePreview","_moveOrScalePreview","disableComments","contentContainer","BaseDocumentPreviewSettings","set","_previewScaleStorageName","defaultScale","storageGroupName","_enableTrackChangesStorageName","_showCommentsStorageName","toolbarDataPrivatePropertyKey","toolbarControlsPrivatePropertyKey","Toolbar","toolbarPrivatePropertyKey","paginationButtons","reverseAction","_prepareControls","jScaleInput","scaleRequisiteInstance","scaleDropDownItems","PREVIEW_SCALE_LOCALIZATION","updatePaginator","updatePageCount","buttonGroupData","_bindContextMenuButton","controlSelectors","getControlSelectorHelper","ToolbarControl","PaginationToolbarControl","_bindPaginationControl","buttonData","FitToToolbarButton","BaseToolbarButton","SelectableToolbarButton","commonButtons","jContextMenuButton","_jToolbar","jButtonsPanel","contextmenuOffset","setJumpToPageWrapper","domButton","newPageNumber","jPageNumberField","_ref11","_ref10","toolbarButtonSelectorPrivatePropertyKey","toolbarButtonActionPrivatePropertyKey","_bindAction","_jButton","_performAction","toolbarButtonReverseActionPrivatePropertyKey","_global$BaseToolbarBu","mainAction","isTurnedOn","turnOff","shouldCallDefaultAction","_toggleAction","_reverseAction","shouldBeTurnedOn","DEFAULT_SCALE","toolbarButtonScalePrivatePropertyKey","_global$SelectableToo","buttonScale","shouldFitToScale","toolbarJControlPrivatePropertyKey","selectorList","_jControl","_global$ToolbarContro","menuType","jClickedEl","types","uniq","resultMenuItems","getMassMenuItemsByTypes","_toggleMarkAsReadMenuItemText","getOrAddContextMenuFormCache","setMenuProperties","hasStatusBar","every","showContextMenuInternal","markAsReadMenuItem","enableItem","setDefaultItem","defaultItem","showContextMenuForOneObject","listItem","menuOptions","specObjType","specObjTypeLen","contextMenuSettings","taskChangeButton","isTaskReadOnlyMode","jListParent","showReferenceContextMenu","showForFolderTreeItem","menusCache","menuSettings","updateContextMenu","props","copyItem","dd","resultMenuItemsId","newResultMenuItemsId","currentItems","newResultMenuItems","clickedId","hasClicked","any","selectClickedElementAndUnselectOther","enableDisableItems","g_IsReferenceReadOnly","deleteItemById","newItems","changedItems","switchItemsForAgent","disableItem","edoc","com","localcopy","current_fol","showContextMenuForManyObjects","isElementInFolderTree","copyFolderLinkOnCreate","jFol","canCopy","pasteLinksOnCreate","pasteLinksToFolderOnCreate","canPaste","deleteLinksFromFolder","parentFolderId","currentFolderIndex","deleteFolderLink","deleteFolderLinkModel","ObjDeleteLink","setAutoCleanFolder","deleteLinksFromFolderOnCreate","canDelete","sendAsTaskAttachmentForFolderOnCreate","canSend","createAndAttachOnCreate","jAttachmentsToolbar","jAttachButton","currentFolderID","currentNeedToShow","NeedToShow","showFolderInListOnCreate","RemoveUserStatusCookie","LoginUser","changePasswordCallback","showMessageCallback","showErrorCallback","mobileView","loginFunc","AUTH_REQUEST_RESULT","CHANGE_DEFAULT_PASSWOD","g_defaultPage","STD_AUTH_PROVIDERS","WINDOWS","SQL","NOVELL","SHOW_LOGON_MESSAGE","buttonHandlers","accessRightButtons","accessRightsDialog","accessRightsKey","textAreaSelector","initialTextAreaValue","jTextArea","isControlChangedBefore","setButtonsEnablingOnEnabledMode","enableButtonsOnFormChange","buttonNames","jRoute","jAdditionalIcons","jSelectStandardRoute","ChangeStandartRoute","inputsWithBindings","isBindNeeded","toolBarButtonNames","enableButtonNames","toolBarButton","waitIntervalID","selectedProvider","defaultRealm","jPassword","jRealm","jChangePasswordLabel","jDefaultRealm","detectAutomatedTesting","initInputsFocus","initDomObjects","bindInputHandlers","onAuthenticationProviderChange","jAdvancedSettingsContainer","jProviders","jLogin","jError","jLoginContainer","processUserName","formSubmit","duration","credentials","passwordField","enteredLogin","loginField","g_userCredentials","realmField","authenticatedUserName","showMessageOnLogin","showLogonMessage","showChangePasswordMessage","firstMsg","firstLogin","showLoginForm","buttonSet","domainInfo","findDomain","hasDomain","domain","connectionString","separators","showPasswordChangeForm","jLoginLabel","hideMessageOnLogin","ChangeUserPassword","showWait","loginform","hideWait","_jFilterContainer","InitToolbar","InitExplorerSidebar","setCurrentState","_initFolderTreeScroll","_initExpandFolderTree","openFolder","FolderId","FolderMode","FilterJs","_exec","initFastSearchFilter","Main","MainJs","hasCoverSelector","jCoverFrame","hideButtons","actionsModels","ContentsActions","actionModel","_setContentsButtonsEnabling","_bindContentsButtonsEnablingOnItemsSelect","localStorageKey","folderWidths","storedMode","jObjectListItems","isLocalStorageOutdated","jObjectListItemColumns","currentWidth","dataName","handles","maxWidth","_onCellResizeStop","cellWidth","getTitle","refreshList","jCurrentView","fmode","isCover","executeQuickSearch","collapseFolderTree","expandFolderTree","_jSpinner","_initShowFolderInList","bindShowFoldersInListClick","jShowFoldersInListButton","selectedSelector","_setShowFolderInListState","checkedItems","checkedItemsCount","buttonsEnabledOnlyForOneSelected","buttonssEnabledForMultiSelected","getButtonsEnabledForMultiSelected","loadAvailableTransformations","","availableTransformations","massExport","transformationValues","transformationIsSuccess","disableTransformation","transformationName","archiveName","selectedDocuments","CompressResult","exportSettings","PackToEsd","massExportLockAll","formBuilder","massExportLockAsk","ask","addRadioButtons","nolock","showExportResult","exportFailedDocuments","DocumentsMassExportResult","failedDoc","currentDocument","exportDocuments","spinnerDialog","ArchiveName","res2","Settings","someDocumentsExported","OnlyApprovingSignaturesType","confirmationDialog","versionFromForm","massExportVersionAsk","DocumentMassExportSettings","docSetting","showDialogForOneDocument","isLast","setting","exportParam","needBlock","askLock","docSettingAsked","updateExportSettings","prevSetting","removeDocFromExportSettings","HelpPageCode","exportHelpLink","toggleReadStatus","jobIds","unreadJobs","JobIDList","markAsRead","newModel","serviceURl","PerformResult","_performResults","Agent","agentCore","isDisabledValue","checkAvailability","isARM","ua","isBlackberry","_showState","g_UserContextID","_showWaitMoreDialog","_showWaitMoreDialogTimeout","isAgentStartedAfterWait","cancelClickAndOnClose","transport","waitForStart","_showAgentStartedInAnotherSessionDialog","restart","packageName","g_AgentInstallID","attemptNumber","uploadLogs","UserLanguage","g_User","SystemLanguage","appLang","SessionID","System","IsSecured","Host","WebLinkServer","g_MaxJsonRequestLength","NewJobsNotificationToken","LogServiceToken","ClientAffinity","language","httpReady","checkDocumentLocalCopies","ShowLocalCopiesWindow","DocumentVersion","AdditionalInfo","PluginVersion","TokenPinCode","_signObject","Attributes","signJob","signTask","certificateID","encryptionType","_getObjectDecryptedKey","getTaskDecryptedKey","getJobDecryptedKey","addLink","transmittedRefs","getLinkSourceLocation","jSettingsAutocleaningAfterdays","jSettingsAutocleaningOnCompletion","autocleaningFolderList","defaultSettings","jSettingsAutocleaningPeriod","AllUsersLinkStoringPeriod","AutoCleanInbox","defaultLinks","AutoCleanOutbox","jSettingsAutocleaningEnable","saveAutoCleaningSettings","switchAutoCleaningSettings","jParentControl","parentControlIsChecked","managedFoldersIDs","jChildCheckbox","updateManagedFoldersLinks","saveTimeout","installAgent","InitializeAgentSession","themes","initAgentControls","jCheck","jDownload","jLaunch","jUploadLogFiles","saveDocDefaultActionSettings","applyPreviewSettings","isPreviewEnabled","isColoringRecordsEnabled","isFullscreenPreview","openDocForEditByDefault","openCardByDefault","EnablePreview","g_isColoringRecordsEnabled","EnableColoringRecords","UseFullScreenPreview","OpenCardByDefault","OpenDocForEditByDefault","initPreviewSettings","jColoringRecordsEnabled","jOpenFullscreenPreviewChk","g_isColoringRecordsSettingsHidden","jSettingsAutocleaningDefault","changedObjects","updateDefaultAutocleaningSettings","AutocleaningDefaultChangeLink","enableAutoClean","CleanMode","LinkStoringPeriod","linkStoringPeriod","cleanMode","addAutoCleanFolder","setAutoCleaningSettings","createAutocleaningSettingsFromDefaultSettings","cancelLock","setNewLanguage","isPassthrough","relogin","reloginLater","initDocDefaultAction","jBtn","jOpenEditorFromListChk","jOpenDocForReadingDefaultChk","lang","jOpenDocForEditingDefaultChk","langCaption","jOpenPreviewFromListChk","enableRadioButton","disableRadioButton","jOpenCardFromListChk","loadThemesData","initThemesEvents","rgbColor","opt_commit","jParentCheckbox","jChildContainer","changeTheme","initManagedFoldersSettings","changeChildControlsCheckedState","checkedItemsLength","allItemsLength","bindButtonsEnablingOnMainSectionRequisitesInput","bindButtonsEnablingOnDetailSectionRequisitesInput","_bindOnRequisiteKeyPress","deleteTableRow","framePosition","jInnerPanel","jPanelGroup","panelGroupPosition","referenceInit","getPlacementContext","g_ReferencePlacementContext","currentTab","prefix","ReferenceDataSource","_cacheID","placementContext","CacheID","rowsQuery","globalLikeFilter","SelectExpression","IgnoreRestrictions","QueryContext","GlobalLikeFilter","forceSaveToServer","SelectListDataProvider","_cachedPages","lastLike","lastExpression","lastCurrentPeriodEnabled","specialRecords","CustomFilter","SelectExpr","Skip","queryInstanceID","LINK_CELL","getReferenceRecordStyle","styleRules","G","B","IsBold","IsItalic","IsStrikeOut","initReference","createReferenceRecordObj","getReferenceRecordRowAdditionalInfo","backgroundColorObj","sourceTabName","data-refcode","oncontextmenu","sidebarTabs","referenceRecordsCellTemplate","cellNumber","columnRecId","referenceGrid","notifyObjectList","_DetailSectionNumber","ObjectLink","CardTypeCode","rowsList","DetailsDataProvider","newSavedFilters","enableFilterActions","disableFilterActions","getGrid","reloadFiltersAndData","initFilterMenuItems","createReferenceMenu","autoFilter","saveFilterItemIndex","prevLast","currentMenu","saveCurrentFilter","saveCurrentFilterAs","deleteFilter","newCurrentFilter","UnselectAllRecords","createNew","CP","autoFilterName","clearFilter","selectedID","emptyItem","wellFormedFilters","btnsDisabled","updateFilterMenuWidget","jFilterMenuWidget","handlers","newVersion","g_Version","oldVersion","clearOldCache","clearOldTemplates","reportPage","ReportDialog","getSpinnerDialog","showFinishDialog","BaseSelectRequisite","linkPageName","_initControl","_jHidden","_bindOnPaste","_onPaste","pastedData","clipboardData","_loadExtendedDataForLinks","extendedLinks","_setValueByLinks","_convertLinkToReferenceSelectValue","extendedLink","_parsePastedDataAndGetLinks","pastedLines","_parsePastedLine","lineLowered","_sysCodeLowered","_parseSuitableUrl","DocumentSelectRequisite","_showAdditionalButtons","isAccessDenied","_hideAdditionalButtons","referenceSelectPluginSettings","DocumentSelectDataProvider","afterSelectCallback","isNeedCallAfterSelectCallbackOnClear","_link","documentName","idIndex","idStr","_attachResult","afterSelectFunc","isNeedCallFuncOnClear","jOpenBodyIco","jOpenIco","openSelected","inputId","openSelectedBody","queryString","sortRequisite","iconName","g_ImgsByDocExt","editorIcon","signIcon","ReferenceRecordSelectRequisite","CreateSubTaskFromListActions","CreateSubTaskFromContextMenu","newTaskID","serviceName","serviceParams","newCard","pageUrl","StandardRouteID","WorkID","WorkType","WorkflowBlock","currentDialog","ClearOpAfterError","routeId","errMessage","setStandardRouteCallback","_showWarningFunc","_isModalShown","inps","ms","isModalShown","referenceSelectInstance","selItem","UsersRefName","UserGroupsRefName","StandardRoutesRefName","RouteLastObjectsRefName","isInModal","isNeedToAddLastObject","itemToReplace","MAX_ROUTE_PARTICIPANT_COUNT","CurrentUsersCount","ShowWarningForTaskRouteException","ExpandUsersGroup","replaceGroup","yesBtn","isButtonClicked","excludeGroups","customPlaceHolder","customPlaceholder","OnAfterOpen","OnSelectedItem","TaskRouteChanged","ShowMultiSelectModalWindow","BindRemoveLastObjectBtn","rowIco","delBtn","touchDev","attd","clamp","jCardTabContainer","defaultAttachWidth","jConversation","maxX","jSavedText","minX","dragAreaHeight","minTextAreaHeight","taskCorrespondsHeight","ShowOnlyCurrentRelatedTasks","jTreeElements","jChildrenOfCurrentElement","jExpandCollapseArrow","jChildrenOfParentForCurrentElement","textAreaHeight","jArrow","ScrollTreeToCurrentJob","ShowTaskAttachmentsAssignRightDlg","savedTextTop","currentCustomWorkTop","jCurrentCustomWork","userRights","isTask","postbackAction","resVar","attachmentsRights","ProceedTaskStarting","DoActionForJob","setEncryption","encryption","rightType","getSuitableCertificates","signingCustomWorkIds","_sendSignDataToAgent","certId","afterSignCallback","getErrorWithCustomWorkName","SignCustomWork","information","certificate","opt_silent","successMessageCode","certArr","jTokenPinCode","CertificateID","jDocsTokenPinCode","IsValid","DefaultCertificate","onSignCallback","customworkElement","pinCodeValue","tokenPinCodeId","GetEncryptedCustomWorkTree","GetDecryptedKey","GetEncryptedJobTree","ShowEncodedObjectError","jCard","encryptTaskWithCert","EncryptWithCertCheckbox","MainTaskID","ParseLocalCopyModifyDate","timedateSeparatorIndex","timePart","datePart","monthSeparatorIndex","daySeparatorIndex","month","year","hoursSeparatorIndex","minsSeparatorIndex","mins","secs","GetDocumentSizeAsString","sizeB","sizeMB","sizeKB","LocalCopies","hasOnlyOneCopy","documentVersion","localCopyModifyDate","EditDate","documentModifyDate","LastModifiedText","Size","4","GetFileNameFromDoc","ExportCert","certid","registerDisableShowUnreadControlForMobile","kindsToDisable","noKey","disableShowUnreadControl","jShowUnreadControl","getShowUnreadControl","showUnreadPick","jMainContainerInputs","initialSerializedValues","RegisterDisableShowUnreadControlForMobile","DisableShowUnreadControl","MultiSelectModalWindow","rsInstance","dataObject","withGroupColumn","selectedRecordsTable","filterSpinner","groupsListMessageBox","navigationKeyCodes","lastFilterValue","defaultMarkedRecordIconClass","treeUrl","treeModeGroupIconClass","treeModeMarkedGroupIconClass","favoriteUserGroupIconClass","recordsListContextMenu","bindWindowOnInput","_filterTimeout","_isNotAllRecordsShown","bindThis","convNewValues","convertRefSelectItemToThis","convertRefSelectItemIdToThisId","requestTree","sendRequests","_lastRequests","fillAvailableGroups","sendRequest","isLoaded","MULTI_SELECT_RECORD_COUNT","onSuccessGetData","_row$id$split","onErrorGetData","findSelectedItemById","showModalWindow","buildHtml","hideContextMenu","_disableRefSelectInputIfAndroid","fillItemsList","fillSelectedItemsTable","_InitEvents","_adjustModalWindowIfSmallScreen","groupname","buildSelectedRecords","buildSelectedItemsTable","buildSelectedItemsTableRow","buildLeftArea","_BuildPlaceholderString","filterDisabledAttr","hideGroupsListMessage","groupNames","buildItemsList","buildGroupsList","_updateRecordsList","showInfoInGroupsList","_isFilterEmpty","MarkSelectedRecordsInList","buildSingleGroup","g_group","recordName","defaultRecordIconClass","showGroupsListMessage","Filtrator","fillTree","_InitRecordsListEvents","msgBox","_InitInternalObjects","_InitScrollForTouchScreens","maxScrollY","recordsListScroll","_InitSelectedRecordsEvents","_InitLeftAreaEvents","UnhoverItem","_InitItemsListContextMenu","_initHintEvents","pos","ShowHideRecordsGroup","contextMenuBtn","ShowContextMenuTablet","sScrollX","_InitFilterInputEvents","_KeyPressEventHandler","RightArrowKeyPress","LeftArrowKeyPress","DeleteItemFromSelection","DeleteKeyPress","HideRecordsGroup","GetNextItemToSelect","ScrollListToHoveredItem","NextItem","findSiblingOrParent","MoveCursor","getItemsListHeight","scrollListToHoveredItem","abs","ShowRecordsGroup","groupTitle","gr","grEl","_CheckFilterValue","groupCode","_addItemCollectionToSelectedTable","MakeFilterRequest","changedValue","whiteSpaceCheck","MarkRecord","checkEmptyTable","markedIconClass","emptyRow","c_CardFormCmd_AddDetailItem","c_CardFormCmd_DeleteDetailItem","startMonitoringTime","CardForm","someWait","CardFormInitMonitor","ShowAll","copyLinksToClientBuffer","textHtml","textPlain","copy","text/plain","copyLinksInSessionStorage","copyTextToClipboard","showTokenPinControls","withAnimation","hideTokenPinControls","getSelectedVersionNumber","getIsApproving","getIsSubstitute","id_base64","certInfo","plugin_version","plugin_version_base64","getSelectedUser","setAllowedUserCodes","signType","isMultiple","verData","opt_verNumber","signTypeVal","vis","app","IsApprovingSignType","certData","addInfo","getSubstitutedUserCodes","docKind","pleaseWaitMessage","checkConditions","userCode","canApprovingSign","CanApprovingSign","signatures","SignsInfo","curCert","isApproving","getSelectedCertificate","isSubstitute","curUserName","signErr","curUserCode","SignatureType","signatureIcon","signIco","updateSignIco","isSignCustomwork","ObjType","confirmed","runWithCheckReadByUser","saveDialogParams","objtype","objLink","objTypeName","getErrorWithDocName","confirmSignDialog","confirmDialog","okAction","UnlockDocIfNeed","edocVersion","EdocId","_topSpinner","_pleaseWaitText","_pleaseWaitCounter","isControlsInited","jModalWnd","disableFunction","SignEDoc_InitControls","taskIds","taskNames","jobNames","certSelect","users","curUserCodes","jVersionSelect","opt_customWorkSignResults","signMultiple","signResults","_$","selectedVersion","signVersions","OnlyActual","docsWithManyVersions","askFinished","buildNextDialog","CheckIsSearchNotEmpty","emptyCriteriaWarningMessage","isAnyCriteriaFilled","criteriaContainer","criterionInputs","criterionInput","jCriterionInput","BindOnEnterToSearchCrit","ClearSearch","_restoreSearchDefaultValues","jSearch","ChangePositionSearchButtons","LoadSearch","JobSearch","SearchEDoc","TaskSearch","GeneralSearch","heightNew","jsearchCriterias","jsearchCriteriasDiv","searchCriteriasDivHeight","searchCriteriasHeight","margin-right","padding-right","-ms-overflow-style","overflow-x","searchId","ExecuteSearch","showLastObjects","executeLastActedObjectsSearch","actedByRequisiteId","actedDateRequisiteId","sortBy","jRequisite","REFERENCE_NAME","lastWeek"],"mappings":"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","file":"all.js","sourcesContent":["/**\r\n* Возвратить строку, собранную из строки формата и переданных аргументов.\r\n* Заменяет каждый элемент формата в строке, например {0}, {1} … {key}, текстовым эквивалентным значением.\r\n* Не имеет возможности экранировать символы {}.\r\n*\r\n* @global\r\n* @function format\r\n* @param {String} text Строка, которую необходимо преобразовать\r\n* @param {Params} Текстовые эквивалентные значения для замены\r\n* @return {string} Строка, собранная из строки формата и переданных аргументов.\r\n*\r\n* @example\r\n* a = \"цветок\"\r\n* b = \"Подсолнух\";\r\n* var result = format('{1} это {0}', a,b);\r\n* //В результате появится строка «Подсолнух – это цветок»\r\n*/\r\nfunction format(str, params) {\r\n if (!str || arguments.length < 2) return str;\r\n var _params = params;\r\n if (arguments.length > 2 || typeof _params != \"object\")\r\n _params = Array.prototype.slice.call(arguments, 1);\r\n return str.replace(/\\{([^{}]+)\\}/g, function (s, key) {\r\n if (key in _params)\r\n return _params[key];\r\n else\r\n return s;\r\n });\r\n}\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Преобразовать дату в строку с учетом текущей локализации.\r\n*\r\n* @global\r\n* @function formatDate\r\n* @param {Date} date Дата.\r\n* @param {String} format Формат даты.\r\n* @return {string} Отформатированная строка даты.\r\n*/\r\nfunction formatDate(date, format) {\r\n if (!$.datepicker) return '';\r\n var df = format || $.datepicker.regional[currentCultureName].dateFormat;\r\n return $.datepicker.formatDate(df, date);\r\n}\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Преобразовать дату и время в строку с учетом текущей локализации.\r\n*\r\n* @global\r\n* @function formatDateTime\r\n* @param {Date} time Дата и время.\r\n* @param {String} format Формат даты и времени.\r\n* @param {boolean} [removeZeroTime = true] True – если нулевое время нужно отбрасывать, иначе False.\r\n* @return {string} Отформатированная строка.\r\n*/\r\nfunction formatDateTime(time, format, removeZeroTime = true) {\r\n if (!$.datepicker || !$.timepicker) return '';\r\n if (time === null) return '';\r\n var df, tf;\r\n\r\n if (format) {\r\n var formatParts = format.split(' ');\r\n df = formatParts[0];\r\n if (formatParts.length > 1) {\r\n tf = formatParts[1];\r\n } else {\r\n tf = '';\r\n }\r\n } else {\r\n df = $.datepicker.regional[currentCultureName].dateFormat;\r\n tf = $.timepicker.regional[currentCultureName].timeFormat;\r\n }\r\n\r\n var ampm = tf.indexOf('TT') > -1;\r\n var tmptime;\r\n var hours = time.getHours();\r\n var minutes = time.getMinutes();\r\n var seconds = time.getSeconds();\r\n\r\n // Если время 00:00:00, то отбрасываем его\r\n if (!removeZeroTime || hours > 0 || minutes > 0 || seconds > 0) {\r\n if (ampm) {\r\n var hour12 = hours % 12;\r\n if (hour12 === 0)\r\n hour12 = 12;\r\n tmptime = tf\r\n .replace(/hh/g, leadzero(hour12))\r\n .replace(/h/g, hour12)\r\n .replace(/mm/g, leadzero(minutes))\r\n .replace(/m/g, minutes)\r\n .replace(/ss/g, leadzero(seconds))\r\n .replace(/s/g, seconds)\r\n .replace(/TT/g, (hours >= 12 ? 'PM' : 'AM'));\r\n } else {\r\n tmptime = tf\r\n .replace(/hh/g, leadzero(hours))\r\n .replace(/h/g, hours)\r\n .replace(/mm/g, leadzero(minutes))\r\n .replace(/m/g, minutes)\r\n .replace(/ss/g, leadzero(seconds))\r\n .replace(/s/g, seconds);\r\n }\r\n return formatDate(time, df) + ' ' + tmptime;\r\n } else {\r\n return formatDate(time, df)\r\n }\r\n}\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовать строку в дату и время с учетом текущей локализации.\r\n *\r\n * @global\r\n * @function parseDateTime\r\n * @param {string} date Строка даты в формате ДД.ММ.ГГГГ ЧЧ:ММ\r\n * @return {Date} Отформатированная строка.\r\n *\r\n * @example\r\n * parseDateTime('1')\r\n * parseDateTime('12.11.2012')\r\n * parseDateTime('12.11.12 14:21')\r\n */\r\n var parseDateTime = window.ParseDateTime = function (inp) {\r\n\r\n var val;\r\n var d;\r\n var m;\r\n var y;\r\n var tmpDate;\r\n var daysInMonth;\r\n var i;\r\n var separator;\r\n var format;\r\n var russianLocale = 'ru-RU';\r\n var enLocale = 'en-US';\r\n var cultureName;\r\n\r\n if ($.type(inp) === \"string\") {\r\n val = $.trim(inp);\r\n } else {\r\n val = $.trim(inp.val());\r\n }\r\n if (!val) return null;\r\n\r\n if (val.indexOf('/Date(') === 0) {\r\n return new Date(parseInt(val.replace(\"/Date(\", \"\").replace(\")/\", \"\"), 10));\r\n }\r\n\r\n cultureName = currentCultureName;\r\n\r\n if ($.type(inp) === \"string\") {\r\n if (inp.indexOf('.') !== -1) {\r\n cultureName = russianLocale;\r\n }\r\n\r\n if (inp.indexOf('/') !== -1) {\r\n cultureName = enLocale;\r\n }\r\n }\r\n\r\n var culture = $.datepicker.regional[cultureName];\r\n var separator = culture.dateseparator;\r\n var format = culture.dateFormat.split(separator);\r\n var timeFormat = $.timepicker.regional[cultureName].timeFormat.split(\":\");\r\n\r\n var today = new Date();\r\n var dmy = val.split(separator);\r\n\r\n var timeFormat;\r\n var time = [];\r\n\r\n for (i = 0; i < format.length; i++) {\r\n format[i] = $.trim(format[i]).substring(0, 1);\r\n }\r\n\r\n // Если ввели только одно число, то считаем, что нужен текущие месяц и год (время 00:00:00).\r\n if ((dmy.length === 1 && !!dmy[0] && parseInt(dmy[0], 10) > 0 && parseInt(dmy[0], 10) <= 31) || (dmy.length === 2 && !dmy[1])) {\r\n d = val;\r\n m = today.getMonth();\r\n y = today.getFullYear();\r\n tmpDate = new Date(y, m + 1, 0);\r\n daysInMonth = parseInt(tmpDate.getDate(), 10);\r\n\r\n if (daysInMonth >= d && d > 0) {\r\n return (new Date(y, m, d));\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Если ввели два числа, то считаем, что нужен текущий год (время 00:00:00).\r\n if ((dmy.length === 2 && !!dmy[1]) || (dmy.length === 3 && !!dmy[1] && !dmy[2])) {\r\n d = dmy[format.indexOf(\"d\")];\r\n m = parseInt(dmy[format.indexOf(\"m\")], 10) - 1;\r\n y = today.getFullYear();\r\n tmpDate = new Date(y, m + 1, 0);\r\n daysInMonth = parseInt(tmpDate.getDate(), 10);\r\n\r\n if (daysInMonth >= d && d > 0 && m <= 11 && m >= 0)\r\n return (new Date(y, m, d));\r\n else\r\n return null;\r\n }\r\n\r\n // Если ввели 3 числа и среди них нет пустой строки\r\n if (dmy.length == 3 && dmy.indexOf(\"\") == -1) {\r\n d = dmy[format.indexOf(\"d\")];\r\n m = parseInt(dmy[format.indexOf(\"m\")], 10) - 1;\r\n y = parseInt(dmy[format.indexOf(\"y\")], 10);\r\n\r\n // Если год 2-хзначиное число и больше 60, это это прошлый век, иначе текущий.\r\n if (y < 100) {\r\n if (y > 60) y += 1900; else y += 2000;\r\n }\r\n\r\n // Для предотвращения ошибки \"Переполнение SqlDateTime. Должно находиться в пределах от 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.\".\r\n if (y < 1800) {\r\n y = 1800;\r\n }\r\n\r\n tmpDate = new Date(y, m + 1, 0);\r\n daysInMonth = parseInt(tmpDate.getDate(), 10);\r\n\r\n time = null;\r\n\r\n // Если задано время либо время+AMPM (для английского формата)\r\n var tmpTime = $.trim(val).split(\" \");\r\n if (tmpTime.length > 1 && tmpTime.indexOf(\"\") == -1) {\r\n // Удалим дату из массива\r\n tmpDate = tmpTime.splice(0, 1);\r\n time = tmpTime[0];\r\n\r\n\r\n for (var i = 0; i < timeFormat.length; i++) {\r\n timeFormat[i] = $.trim(timeFormat[i]).substring(0, 1);\r\n }\r\n\r\n time = ParseTime(tmpTime, timeFormat);\r\n }\r\n\r\n // Число должно быть не больше, чем в указанном месяце, а месяц - не больше 11 (0 - январь)\r\n if (daysInMonth >= d && d > 0 && m <= 11 && m >= 0) {\r\n if (time) {\r\n return (new Date(y, m, d, time[0], time[1], time[2]));\r\n }\r\n else {\r\n return (new Date(y, m, d));\r\n }\r\n }\r\n else return null;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Преобразовать строку в дату с учетом текущей локализации.\r\n *\r\n * @global\r\n * @function parseDate\r\n * @param {String} date Строка даты в формате ДД.ММ.ГГГГ\r\n * @return {string} Отформатированная строка.\r\n */\r\n function parseDate(date) {\r\n return window.ParseDateTime(date);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить хеш (на самом деле нет) указанной строки.\r\n *\r\n * @global\r\n * @function getHash\r\n * @param {string} [str] Строка, для которой необходимо посчитать хэш.\r\n * @return {number} Хеш строки.\r\n *\r\n * @example\r\n * getHash('азбука') === 4302529\r\n * getHash('азбуки') === 4302537\r\n */\r\n function getHash(str = '') {\r\n const m = 12345678;\r\n let h = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n h = (h * 255 + str.charCodeAt(i)) % m;\r\n }\r\n return h;\r\n }\r\n\r\n /**\r\n * Преобразовывает типы данных значений реквизита в строковое представление\r\n * @global\r\n * @function requisiteTypeToString\r\n * @param {integer} reqType Целое представление типа\r\n * @return {string} Имя типа данных, например \"integer\".\r\n * @since 5.2.0.1300\r\n */\r\n window.requisiteTypeToString = function (reqType) {\r\n switch ('' + reqType) {\r\n case '1':\r\n return 'date';\r\n case '2':\r\n return 'float';\r\n case '3':\r\n return 'pick';\r\n case '4':\r\n return 'string';\r\n case '5':\r\n return 'reference';\r\n case '6':\r\n return 'text';\r\n case '7':\r\n return 'integer';\r\n case '8':\r\n return 'largeinteger';\r\n case '9':\r\n return 'document';\r\n case '11':\r\n return 'objectList';\r\n }\r\n };\r\n\r\n window.requisiteTypeFromString = function (reqType) {\r\n switch (reqType) {\r\n case 'date':\r\n return 1;\r\n case 'float':\r\n return 2;\r\n case 'pick':\r\n return 3;\r\n case 'string':\r\n return 4;\r\n case 'reference':\r\n return 5;\r\n case 'text':\r\n return 6;\r\n case 'integer':\r\n return 7;\r\n case 'largeinteger':\r\n return 8;\r\n case 'document':\r\n return 9;\r\n case 'objectList':\r\n return 11;\r\n }\r\n };\r\n\r\n /**\r\n * Преобразовать тип объекта в строку.\r\n *\r\n * @global\r\n * @function objectTypeToString\r\n * @param {OBJECT_TYPE} type Тип объекта\r\n * @return {String} Преобразованная строка. Например, объект типа «Справочник» будет преобразован в строку 'REF'.\r\n * @since 5.0.0.7200\r\n */\r\n function objectTypeToString(objectType) {\r\n switch (objectType) {\r\n case OBJECT_TYPE.EDOCUMENT:\r\n return \"EDOC\";\r\n case OBJECT_TYPE.FOLDER:\r\n return \"FOL\";\r\n case OBJECT_TYPE.TASK:\r\n return \"TASK\";\r\n case OBJECT_TYPE.JOB:\r\n return \"JOB\";\r\n case OBJECT_TYPE.REFERENCE_RECORD:\r\n return \"REF\";\r\n case OBJECT_TYPE.ANY:\r\n return \"ANY\";\r\n case OBJECT_TYPE.UNKNOWN:\r\n return \"UNKNOWN\";\r\n default:\r\n WA.raise('UNKNOWN_TYPE ' + objectType);\r\n break;\r\n }\r\n return null;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Перевод строки в требуемый тип объекта\r\n *\r\n * @global\r\n * @function objectKindToObjectType\r\n * @param {OBJECT_TYPE} type Тип объекта\r\n * @return {OBJECT_TYPE} Объект типа OBJECT_TYPE.\r\n * @since 5.0.0.7200\r\n */\r\n function objectKindToObjectType(objectKind) {\r\n if (!objectKind) return null;\r\n switch (objectKind.toUpperCase()) {\r\n case \"EDOC\":\r\n return OBJECT_TYPE.EDOCUMENT;\r\n case \"FOL\":\r\n return OBJECT_TYPE.FOLDER;\r\n case \"TASK\":\r\n return OBJECT_TYPE.TASK;\r\n case \"JOB\":\r\n return OBJECT_TYPE.JOB;\r\n case \"REF\":\r\n return OBJECT_TYPE.REFERENCE_RECORD;\r\n case \"ANY\":\r\n return OBJECT_TYPE.ANY;\r\n case \"UNKNOWN\":\r\n return OBJECT_TYPE.UNKNOWN;\r\n default:\r\n WA.raise('UNKNOWN_TYPE');\r\n break;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Обрезка длинных строк\r\n * @method String.trunc\r\n * @param {length} допустимая длина\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.trunc = function (n) {\r\n if (!(\"\" + this)) return '';\r\n if (this.substr) {\r\n if (n < 4) return this[0] + \"...\";\r\n return this.substr(0, n - 3) + (this.length >= n ? '...' : '');\r\n }\r\n return \"\" + this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обрезка длинных строк\r\n * @method String.trunc\r\n * @param {length} допустимая длина\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.switchLayout = function (string) {\r\n var map = {\r\n 'q': 'й',\r\n 'w': 'ц',\r\n 'e': 'у',\r\n 'r': 'к',\r\n 't': 'е',\r\n 'y': 'н',\r\n 'u': 'г',\r\n 'i': 'ш',\r\n 'o': 'щ',\r\n 'p': 'з',\r\n '[': 'х',\r\n ']': 'ъ',\r\n 'a': 'ф',\r\n 's': 'ы',\r\n 'd': 'в',\r\n 'f': 'а',\r\n 'g': 'п',\r\n 'h': 'р',\r\n 'j': 'о',\r\n 'k': 'л',\r\n 'l': 'д',\r\n ';': 'ж',\r\n '\\'': 'э',\r\n 'z': 'я',\r\n 'x': 'ч',\r\n 'c': 'с',\r\n 'v': 'м',\r\n 'b': 'и',\r\n 'n': 'т',\r\n 'm': 'ь',\r\n ',': 'б',\r\n '.': 'ю',\r\n '\\/': '.',\r\n '\\`': 'ё'\r\n }\r\n //TODO http://underscorejs.org/#invert для RU-EN\r\n return _(this).map(function (ch) {\r\n return map[ch]\r\n }).join('');\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Замена всех подстрок в строке\r\n * @method String.replaceAll\r\n * @param {needle} искомая строка\r\n * @param {replacement} замена\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.replaceAll = function (needle, replacement) {\r\n if (this.replace) return this.replace(new RegExp(needle, 'g'), replacement || '');\r\n else return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Экранирование HTML\r\n * @method String.escapeHtml\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.escapeHtml = function () {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': '"',\r\n \"'\": ''',\r\n \"/\": '/'\r\n };\r\n\r\n return String(this).replace(/[&<>\"'\\/]/g, (s) => {\r\n return entityMap[s];\r\n });\r\n\r\n }; \r\n\r\n /**\r\n * Деэкранирование HTML\r\n * @method String.unescapeHtml\r\n * @since 5.7.1.9000\r\n */\r\n String.prototype.unescapeHtml = function () {\r\n var entityMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\",\r\n '/': '/'\r\n };\r\n\r\n return String(this).replace(/&(amp|lt|gt|quot|#39|#x2F);/g, (s) => {\r\n return entityMap[s];\r\n });\r\n\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаление HTML тегов из строки\r\n * @method String.stripHtml\r\n * @since 5.1.0.1505\r\n */\r\n String.prototype.stripHtml = function () {\r\n if (this.replace) return this.replace(/<(?:.|\\n)*?>/gm, '');\r\n return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Перевод переносов строк в HTML теги br\r\n * @method String.newLinesToBR\r\n * @deprecated\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.newLinesToBR = function () {\r\n if (this.replace) return this.replace(/\\\\n/g, \"
\");\r\n else return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Уадлеяет все символы и пробелы из строки, и возвращает только буквы и числа\r\n * @method String.makeSafeString\r\n * @param {length} Допустимая длина\r\n * @since 5.2.0.1303\r\n */\r\n String.prototype.makeSafeString = function () {\r\n if (this.replace) return this.replace(/[^A-ZА-Я0-9]+/ig, \"_\");\r\n else return this;\r\n };\r\n\r\n\r\n /**\r\n * Удаление ведущих и конечных пробелов.\r\n * @method String.trim\r\n * @since 5.0.0.7300\r\n */\r\n if (typeof String.prototype.trim !== 'function') {\r\n String.prototype.trim = function () {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n }\r\n\r\n /**\r\n * Метод endsWith() определяет, заканчивается ли строка символами другой строки, возвращая, соотвественно, true или false.\r\n * @method String.endsWith\r\n * @since 5.5.0.9000\r\n */\r\n if (!String.prototype.endsWith) {\r\n Object.defineProperty(String.prototype, 'endsWith', {\r\n value: function (searchString, position) {\r\n var subjectString = this.toString();\r\n if (position === undefined || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n }\r\n });\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Приведение строки билдера к нормальному виду\r\n * @method String.fromISBuilderToNormal\r\n * @since 5.0.0.7300\r\n */\r\n String.prototype.fromISBuilderToNormal = function () {\r\n if (!this.replace) return this;\r\n var str = this;\r\n var isInBrackets = false;\r\n var newStr = '';\r\n for (var i = 0; i < str.length; i++) {\r\n if (str[i] == '|' && !isInBrackets) {\r\n newStr = str.substring(0, i) + ' ' + str.substring(i + 1, str.length);\r\n }\r\n else if (str[i] === '&' && (i + 5) < str.length) {\r\n if (str[i + 1] == 'q' && str[i + 2] == 'u' && str[i + 3] == 'o' && str[i + 4] == 't' && str[i + 5] == ';') {\r\n isInBrackets = !isInBrackets;\r\n i += 5;\r\n }\r\n }\r\n }\r\n // ' ывалп \\n вава \\n новая строка'.replace(/\\n/g, ' ')\r\n if (newStr === '') return str.replace(/\\^/g, ' ').replace(/\\n/g, '
');\r\n return newStr.replace(/\\^/g, ' ').replace(/\\n/g, '
');\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создать копию функции.\r\n *\r\n * @function cloneFunction\r\n * @param {Function} func Функция, для которой необходимо создать копию.\r\n * @since 5.0.0.7300\r\n */\r\n var cloneFunction = function (func) {\r\n var reFn = /^function\\s*([^\\s(]*)\\s*\\(([^)]*)\\)[^{]*\\{([^}]*)\\}$/gi\r\n , s = func.toString().replace(/^\\s|\\s$/g, '')\r\n , m = reFn.exec(s);\r\n if (!m || !m.length) return null;\r\n var conf = {\r\n name: m[1] || '',\r\n args: m[2].replace(/\\s+/g, '').split(','),\r\n body: m[3] || ''\r\n };\r\n\r\n var clone = Function.prototype.constructor.apply(this, [].concat(conf.args, conf.body));\r\n for (var key in func) {\r\n if (func.hasOwnProperty(key)) {\r\n clone[key] = func[key];\r\n }\r\n }\r\n return clone;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Получить строку локализации из базы данных системы.\r\n *\r\n * @method getISBString\r\n * @param {String} code Код строки локализации\r\n * @param {boolean} [opt_is_async] Признак ассинхронного получения данных\r\n * @since 5.0.0.7300\r\n */\r\n function getISBString(msg, opt_is_async) {\r\n var R = '';\r\n var data = { 'Code': msg.replace(\"\\'\", \"\\\\'\") };\r\n opt_is_async = !!opt_is_async ? opt_is_async : false;\r\n if (opt_is_async) {\r\n return WA.SRV.call(\"/Session.asmx/GetBuilderResources\", data);\r\n } else {\r\n WA.SRV.callSync(\"/Session.asmx/GetBuilderResources\", data).done(function (res) {\r\n R = res.d;\r\n });\r\n return R;\r\n }\r\n }\r\n\r\n /**\r\n * Генерирует уникальный ID\r\n * @function generateUniqueID\r\n * @global\r\n * @param {Integer} len длина возвращаемой строки\r\n * @since 5.2.0.1100\r\n */\r\n function generateUniqueID(len, radix) {\r\n var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\r\n var chars = CHARS, uuid = [], i;\r\n radix = radix || chars.length;\r\n\r\n if (len) {\r\n // Compact form\r\n for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];\r\n } else {\r\n // rfc4122, version 4 form\r\n var r;\r\n\r\n // rfc4122 requires these characters\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\r\n uuid[14] = '4';\r\n\r\n // Fill in random data. At i==19 set the high bits of clock sequence as\r\n // per rfc4122, sec. 4.1.5\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | Math.random() * 16;\r\n uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n\r\n return uuid.join('');\r\n }\r\n\r\n /**\r\n * Преобразовывает строку с датой формата ISO в объект типа Date.\r\n * @method Date.fromISO\r\n * @param {String} s дата в формате ISO\r\n * @since 5.2.0.1100\r\n */\r\n (function () {\r\n var D = new Date('2011-06-02T09:34:29+02:00');\r\n if (!D || +D !== 1307000069000) {\r\n Date.fromISO = function (s) {\r\n var day, tz,\r\n rx = /^(\\d{4}\\-\\d\\d\\-\\d\\d([tT ][\\d:\\.]*)?)([zZ]|([+\\-])(\\d\\d):(\\d\\d))?$/,\r\n p = rx.exec(s) || [];\r\n if (p[1]) {\r\n day = p[1].split(/\\D/);\r\n for (var i = 0, L = day.length; i < L; i++) {\r\n day[i] = parseInt(day[i], 10) || 0;\r\n };\r\n day[1] -= 1;\r\n day = new Date(Date.UTC.apply(Date, day));\r\n if (!day.getDate()) return NaN;\r\n if (p[5]) {\r\n tz = (parseInt(p[5], 10) * 60);\r\n if (p[6]) tz += parseInt(p[6], 10);\r\n if (p[4] == '+') tz *= -1;\r\n if (tz) day.setUTCMinutes(day.getUTCMinutes() + tz);\r\n }\r\n return day;\r\n }\r\n return NaN;\r\n }\r\n }\r\n else {\r\n Date.fromISO = function (s) {\r\n return new Date(s);\r\n }\r\n }\r\n })();\r\n\r\n /**\r\n * Возможность перезаписи функций, с возможностью запуска родительской функции.\r\n * @inner\r\n */\r\n Function.prototype.override = function (func) {\r\n var superFunction = this;\r\n return function () {\r\n this.superFunction = superFunction;\r\n return func.apply(this, arguments);\r\n };\r\n };\r\n\r\n /**\r\n * Скрывает все выпадаюшие менюшки (выбор из справочника, pick, множественный выбор фильтра по колонкам).\r\n * @inner\r\n */\r\n function hideAllPopups() {\r\n // Скрываем выборы из справочника.\r\n $('.rs_container').hide();\r\n // Скрываем множественный выбор для колонки грида.\r\n $('.selectListPopup').hide();\r\n }\r\n\r\n // Исправляет косяк IE - после манипуляций с DOM, в которых есть svg>use, картинки не отображаются.\r\n function fixSvg(el) {\r\n if (WA.ENV.browser.name !== 'IE') return;\r\n\r\n var xmlns = \"http://www.w3.org/2000/svg\";\r\n var xlink = 'http://www.w3.org/1999/xlink';\r\n\r\n var replacingSvgs = [];\r\n var svgs = el.getElementsByTagName('svg'); // результаты \"живые\", поэтому в этой функции неменяется DOM (не делается insertBefore и removeChild)\r\n for (var i = 0; i < svgs.length; i++) {\r\n var prevSvg = svgs[i];\r\n var svgUse = prevSvg.firstChild;\r\n var svgName = svgUse.getAttribute('xlink:href') || svgUse.getAttribute('href');\r\n\r\n var newSvg = document.createElementNS(xmlns, \"svg\");\r\n newSvg.setAttribute('class', prevSvg.className.baseVal);\r\n var newSvgUse = document.createElementNS(xmlns, 'use');\r\n newSvgUse.setAttributeNS(xlink, 'href', svgName);\r\n newSvg.appendChild(newSvgUse);\r\n\r\n replacingSvgs.push({ prevSvg: prevSvg, newSvg: newSvg });\r\n }\r\n replacingSvgs.forEach(function (r) {\r\n var parent = r.prevSvg.parentNode;\r\n parent.insertBefore(r.newSvg, r.prevSvg);\r\n parent.removeChild(r.prevSvg);\r\n });\r\n }\r\n","'use strict';\r\n\r\n/**\r\n * Минимальная поддерживаемая веб-доступом ширина экрана.\r\n * @global\r\n */\r\nwindow.MIN_SUPPORTS_WINDOW_WIDTH = 1024;\r\n/**\r\n * Минимальная поддерживаемая веб-доступом высота экрана.\r\n * @global\r\n */\r\nwindow.MIN_SUPPORTS_WINDOW_HEIGHT = 768;\r\n\r\n/**\r\n * Режим отображения кнопки.\r\n *\r\n * @readonly\r\n * @enum {boolean}\r\n * @type {{LARGE: boolean, SMALL: boolean}}\r\n * @since 5.0.0.4104\r\n * @example\r\n *\r\n * // Создать кнопку с режимом отображения \"Только иконка\".\r\n * WebAccess.current.toolBar.groups.ATTACHMENTS.createButton(\"myButton\", BUTTON.SMALL);\r\n */\r\nwindow.BUTTON = {\r\n /** Отобразить иконку и подпись для кнопки. */\r\n LARGE: false,\r\n /** Отобразить только иконку кнопки. */\r\n SMALL: true\r\n};\r\n\r\n/**\r\n * Метод отправки формы на веб-сервер.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {string} FORM_METHOD\r\n * @since 5.0.0.7100\r\n */\r\nwindow.FORM_METHOD = {\r\n /** Отправка методом POST */\r\n POST: 'POST',\r\n /** Отправка методом GET */\r\n GET: 'GET'\r\n};\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n * Тип отправляемых данных формы.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {string} ENCTYPE\r\n * @since 5.0.0.7100\r\n */\r\nwindow.ENCTYPE = {\r\n /** Данные формы в виде бинарного кода */\r\n MULTIPART: 'multipart/form-data',\r\n /** Данные формы в текстовом виде */\r\n URLENCODED: 'application/x-www-form-urlencoded'\r\n};\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n/**\r\n * Тип справочника с последними и избранными объектами.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {string} LAST_REFERENCES\r\n * @since 5.0.0.7200\r\n */\r\nwindow.LAST_REFERENCES = {\r\n /** Выбор доступен из справочников «Пользователи», «Группы пользователей» и «Типовые маршруты» */\r\n ALL: '',\r\n /** Выбор доступен из справочника «Пользователи» */\r\n ONLY_USERS: \"!SR!G\",\r\n /** Выбор доступен из справочников «Пользователи» и «Группы пользователей» */\r\n USERS_AND_GROUPS: \"!SR\"\r\n};\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n * Направление сортировки.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {number} DIRECTION\r\n * @since 5.6.0.1000\r\n */\r\nwindow.DIRECTION = {\r\n /** По возрастанию */\r\n ASC: 1,\r\n /** Без сортировки */\r\n NONE: 0,\r\n /** По убыванию */\r\n DESC: -1\r\n};\r\n\r\n/**\r\n * Тип закладки карточки объекта.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {number} TAB_TYPE\r\n * @type {{CARD: number, HISTORY: number, RIGHTS: number, VERSIONS: number, ROUTE_SCHEME: number, CUSTOM_WORK_STATE: number, TASK_CARD: number, JOB_CARD: number}}\r\n * @since 5.6.0.1000\r\n */\r\nwindow.TAB_TYPE = {\r\n /** Закладка «Карточка» */\r\n CARD: 0,\r\n /** Закладка «История» */\r\n HISTORY: 1,\r\n /** Закладка «Состояние» */\r\n RIGHTS: 2,\r\n /** Закладка \"Состояние\" в карточках документов */\r\n VERSIONS: 3,\r\n /** Закладка «Схема маршрута» в карточках задач и заданий */\r\n ROUTE_SCHEME: 4,\r\n /** Закладка «Состояние» в карточках задач и заданий */\r\n CUSTOM_WORK_STATE: 5,\r\n /** Карточка задачи */\r\n TASK_CARD: 6,\r\n /** Карточка задания */\r\n JOB_CARD: 7\r\n};\r\n\r\n/**\r\n * Тип колонки.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {number} COLUMN_TYPE\r\n * @since 5.6.0.9000\r\n */\r\nwindow.COLUMN_TYPE = {\r\n /** Дата */\r\n DATE: 0,\r\n /** Строка */\r\n STRING: 1,\r\n /** Число */\r\n INTEGER: 2\r\n};\r\n\r\n/**\r\n * Тип объекта системы DIRECTUM.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {number} OBJECT_TYPE\r\n * @since 5.0.0.7100\r\n */\r\nwindow.OBJECT_TYPE = {\r\n /** Неизвестный тип */\r\n UNKNOWN: 10,\r\n /** Папка */\r\n FOLDER: 0,\r\n /** Документ */\r\n EDOCUMENT: 1,\r\n /** Задания */\r\n JOB: 3,\r\n /** Задачи */\r\n TASK: 2,\r\n /** Компоненты */\r\n COMPONENT_TOKEN: 4,\r\n /** Произвольный тип */\r\n ANY: 5,\r\n /** Справочники */\r\n REFERENCE: 6,\r\n /** Сценарии */\r\n SCRIPT: 7,\r\n /** Отчеты */\r\n REPORT: 8,\r\n /** Запись справочника */\r\n REFERENCE_RECORD: 9,\r\n /** Пользователь */\r\n USER: 11,\r\n /** Мастер действий */\r\n WIZARD: 12,\r\n /** Пользователь или группа */\r\n USER_OR_GROUP: 100,\r\n /** Поиск */\r\n SEARCH: 101,\r\n /** Диалог */\r\n DIALOG: 102\r\n};\r\n\r\n/**\r\n * Приоритет задачи.\r\n *\r\n * @const\r\n * @global\r\n * @enum {string} TASK_IMPORTANCE\r\n * @type {{LOW: string, NORMAL: string, HIGH: string}}\r\n */\r\nwindow.TASK_IMPORTANCE = {\r\n /** Низкая важность */\r\n LOW: 0,\r\n /** Нормальная важность */\r\n NORMAL: 1,\r\n /** Высокая важность */\r\n HIGH: 2\r\n};\r\n\r\n/**\r\n * Тип состояния задачи и задания.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {string} WORK_STATE\r\n * @since 5.5.0.9092\r\n */\r\nwindow.WORK_STATE = {\r\n /** Инициализация */\r\n INIT: 0,\r\n /** В работе */\r\n RUNNING: 1,\r\n /** Выполнено */\r\n DONE: 2,\r\n /** На контроле */\r\n CONTROLLED: 3,\r\n /** Прекращено */\r\n ABORTED: 4,\r\n /** Возобновлена */\r\n CONTINUED: 5\r\n};\r\n\r\n/**\r\n * Типы данных значений реквизитов.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {string} REQUISITE_TYPE\r\n * @since 5.2.0.1300\r\n */\r\nwindow.REQUISITE_TYPE = {\r\n /** Пусто */\r\n EMPTY: 0,\r\n /** Дата */\r\n DATE: 1,\r\n /** Дробное число */\r\n FLOAT: 2,\r\n /** Признак */\r\n PICK: 3,\r\n /** Строка */\r\n STRING: 4,\r\n /** Справочник */\r\n REFERENCE: 5,\r\n /** Текст */\r\n TEXT: 6,\r\n /** Целое число */\r\n INTEGER: 7,\r\n /** Большое целое число */\r\n LARGE_INTEGER: 8,\r\n /** Документ */\r\n DOCUMENT: 9,\r\n /** Список объектов */\r\n OBJECT_LIST: 11\r\n};\r\n\r\n/**\r\n * @readonly\r\n * @global\r\n * @enum {string} ACTION_ENABLED_MODE\r\n * @since 5.5.0.2201\r\n */\r\nwindow.ACTION_ENABLED_MODE = {\r\n /** Доступно. */\r\n ENABLED_ALWAYS: 0,\r\n /** Недоступно. */\r\n DISABLED_ALWAYS: 1,\r\n /** Доступно при просмотре. */\r\n ENABLED_ON_BROWSE: 2,\r\n /** Доступно при редактировании. */\r\n ENABLED_ON_EDIT: 3,\r\n /** Недоступно без данных. */\r\n DISABLED_ON_BROWSE_EMPTY: 4\r\n};\r\n\r\n/**\r\n * Условия доступности действий в ЗЗУ.\r\n *\r\n * @readonly\r\n * @global\r\n * @enum {number} JOB_ACTION_ENABLED_WHEN\r\n * @type {{IS_ENABLED_ON_ATTACHMENT_SELECTED: number, IS_ENABLED_ON_ABORTED: number, IS_ENABLED_ON_DONE: number, IS_ENABLED_ON_RUNNING: number}}\r\n * @since 5.6.0.1300\r\n */\r\nwindow.JOB_ACTION_ENABLED_WHEN = {\r\n /** Действие доступно, если в области вложений выделен хотя бы один элемент */\r\n IS_ENABLED_ON_ATTACHMENT_SELECTED: 1 << 0,\r\n /** Действие доступно, если ЗЗУ прекращено */\r\n IS_ENABLED_ON_ABORTED: 1 << 1,\r\n /** Действие доступно, если ЗЗУ выполнено */\r\n IS_ENABLED_ON_DONE: 1 << 2,\r\n /** Действие доступно, если ЗЗУ в работе */\r\n IS_ENABLED_ON_RUNNING: 1 << 3\r\n};\r\n\r\n/**\r\n * @readonly\r\n * @global\r\n * @enum {number} CONTENTS_ACTION_ENABLED_MODE\r\n * @type {{ENABLED_IN_SELECTED_MODE: number, ENABLED_ONLY_FOR_SELECTED: number, ENABLED_WHEN_MULTISELECT: number}}\r\n * @since 5.6.0.2700\r\n */\r\nwindow.CONTENTS_ACTION_ENABLED_MODE = {\r\n /** Доступно в режиме списка. */\r\n ENABLED_IN_SELECTED_MODE: 1 << 0,\r\n /** Доступно только для выделенных записей. */\r\n ENABLED_ONLY_FOR_SELECTED: 1 << 1,\r\n /** Доступно при множесетвенном выборе. */\r\n ENABLED_WHEN_MULTISELECT: 1 << 2\r\n};\r\n\r\n/**\r\n * Режим расположения.\r\n *\r\n * @readonly\r\n * @enum {number} ORIENTATION\r\n * @since 5.0.0.4200\r\n *\r\n * @example\r\n * //Установить горизонтальное расположение боковой панели.\r\n * WebAccess.current.sideBar.setOrientation(ORIENTATION.HORISONTAL);\r\n *\r\n * @example\r\n * //Установить последовательное горизонтальное расположение элементов на форме.\r\n * var form = WA.CMP.forms.FormBuilder('someForm');\r\n * form.setOrientation(ORIENTATION.VERTICAL);\r\n */\r\nwindow.ORIENTATION = window.SIDEBAR_ORIENTATION = {\r\n /** Горизонтальное */\r\n HORIZONTAL: 0,\r\n /** Вертикальное */\r\n VERTICAL: 1\r\n};\r\n\r\n/**\r\n * Тип получаемой модели данных.\r\n *\r\n * @readonly\r\n * @enum {number} MODEL\r\n * @since 5.0.0.7300\r\n */\r\nwindow.MODEL = {\r\n /** Полные данные */\r\n FULL: 0,\r\n /** Карточка */\r\n CARD: 1,\r\n /** Содержимое объекта */\r\n CONTENT: 2,\r\n /** Ссылка */\r\n LINK: 3\r\n};\r\n\r\n/**\r\n * Тип доступа к деловому процессу.\r\n *\r\n * @readonly\r\n * @enum {number} WORK_ACCESS_TYPE\r\n * @since 5.0.0.7300\r\n */\r\nwindow.WORK_ACCESS_TYPE = {\r\n /** Всем */\r\n ALL: 0,\r\n /** Ручной */\r\n MANUAL: 2,\r\n /** Участникам */\r\n PARTICIPANTS: 1\r\n};\r\n\r\n/**\r\n * Тип задания.\r\n *\r\n * @readonly\r\n * @enum {number} JOB_KIND\r\n * @since 5.0.0.7300\r\n */\r\nwindow.JOB_KIND = {\r\n /** Задание */\r\n JOB: 0,\r\n /** Уведомление */\r\n NOTICE: 1,\r\n /** Задание-контроль */\r\n CONTROL_JOB: 2\r\n};\r\n\r\n/**\r\n * Тип сообщения.\r\n *\r\n * @readonly\r\n * @enum {number} MESSAGE_TYPE\r\n * @since 5.0.0.7300\r\n *\r\n * TODO: MESSAGE_TYPE переименовать в INLINE_HINT_TYPE (более корректное название).\r\n */\r\nwindow.MESSAGE_TYPE = {\r\n /** Предупреждение */\r\n WARNING: 0,\r\n /** Сообщение об ошибке */\r\n ERROR: 1,\r\n /** Информационное сообщение */\r\n INFO: 2,\r\n};\r\n\r\n/**\r\n * Приоритет встроенной подсказки.\r\n *\r\n * @readonly\r\n * @enum {number} INLINE_HINT_PRIORITY\r\n * @type {{PRIMARY: number, SECONDARY: number}}\r\n * @since 5.6.0.9050\r\n */\r\nwindow.INLINE_HINT_PRIORITY = {\r\n /** Исключение */\r\n PRIMARY: 0,\r\n /** Подсказка */\r\n SECONDARY: 1,\r\n};\r\n\r\n/**\r\n * Тип содержимого папки.\r\n *\r\n * @readonly\r\n * @enum {number} FOLDER_CONTENT_TYPE\r\n * @since 5.0.0.7300\r\n */\r\nwindow.FOLDER_CONTENT_TYPE = {\r\n /** Документы */\r\n EDOCUMENT: 1,\r\n /** Задания */\r\n JOB: 3,\r\n /** Задачи */\r\n TASK: 2,\r\n /** Вариант запуска */\r\n COMPONENT_TOKEN: 4,\r\n /** Произвольный тип */\r\n ANY: 5\r\n};\r\n\r\n/**\r\n * Тип папки.\r\n *\r\n * @readonly\r\n * @enum {number} FOLDER_TYPE\r\n * @since 5.0.0.7300\r\n */\r\nwindow.SPEC_FOLDER_TYPE = window.FOLDER_TYPE = {\r\n /** Папка «Входящие» */\r\n INBOX: 0,\r\n /** Папка «Исходящие» */\r\n OUTBOX: 1,\r\n /** Папка «Избранное» */\r\n FAVORITES: 2,\r\n /** Папка «Общая папка» */\r\n COMMON_FOLDER: 3,\r\n /** Папка пользователя */\r\n USER_FOLDER: 4,\r\n /** Специальный объект «Ярлыки» */\r\n SHORTCUTS: 7,\r\n /** Папка поиска */\r\n SEARCH: 8\r\n};\r\n\r\n/**\r\n * Уровень журналирования\r\n *\r\n * @readonly\r\n * @since 5.1.0.1523\r\n * @enum {string} LOG_LEVEL\r\n * @global\r\n */\r\nwindow.LOG_LEVEL = {\r\n /** Сообщение об ошибке */\r\n ERROR: 'E',\r\n /** Предупреждение */\r\n WARN: 'W',\r\n /** Информационное сообщение */\r\n INFO: 'I',\r\n /** Сообщение об отладке */\r\n DEBUG: 'D'\r\n};\r\n\r\n/**\r\n * Уровень сериализации\r\n *\r\n * @readonly\r\n * @since 5.2.0.1600\r\n * @enum {number} SERIALIZATION\r\n * @global\r\n */\r\nwindow.SERIALIZATION = {\r\n /** Минимальная сериализация, по умолчанию */\r\n LITE: '1',\r\n /** Максимальное кол-во данных */\r\n FULL: '2'\r\n};\r\n\r\n/**\r\n * Названия стандартных действий диалога.\r\n *\r\n * @readonly\r\n * @since 5.2.0.1901\r\n * @enum {String} DIALOG_ACTION\r\n * @global\r\n */\r\nwindow.DIALOG_ACTION = {\r\n /** ОК */\r\n OK: 'OkAction',\r\n /** Отмена */\r\n CANCEL: 'CancelAction'\r\n};\r\n\r\n/**\r\n * Режим открытия справочника в модальном окне.\r\n *\r\n * @readonly\r\n * @since 5.4.0.1013\r\n * @enum {number} REFERENCE_MODAL_MODE\r\n * @global\r\n */\r\nwindow.REFERENCE_MODAL_MODE = {\r\n /** Просмотр */\r\n VIEW: 0,\r\n /** Единичный выбор */\r\n SINGLE: 1,\r\n /** Множественный выбор */\r\n MULTI: 2\r\n};\r\n\r\n/**\r\n * Тип переменной.\r\n *\r\n * @readonly\r\n * @since 5.5.0.1000\r\n * @enum {number} VARIANT_TYPE\r\n * @global\r\n */\r\nwindow.VARIANT_TYPE = {\r\n /** Целое число */\r\n INTEGER: 0,\r\n /** Число с плавающей точкой */\r\n SINGLE: 1,\r\n /** Строка */\r\n STRING: 2,\r\n /** Логический тип */\r\n BOOLEAN: 3,\r\n /** Дата */\r\n DATE_TIME: 4,\r\n /** Задача */\r\n TASK: 5,\r\n /** Задание */\r\n JOB: 6,\r\n /** Папка */\r\n FOLDER: 7,\r\n /** Документ */\r\n DOCUMENT: 8,\r\n /** Запись справочника */\r\n REFERENCE_RECORD: 9,\r\n /** Пользователь */\r\n USER: 10,\r\n /** Группа пользователей */\r\n USER_GROUP: 11,\r\n /** Роль */\r\n USER_ROLE: 12,\r\n /** Коллекция целых чисел */\r\n INTEGER_COLLECTION: 13,\r\n /** Коллекция чисел с плавающей точкой */\r\n SINGLE_COLLECTION: 14,\r\n /** Коллекция строк */\r\n STRING_COLLECTION: 15,\r\n /** Коллекция логических типов */\r\n BOOLEAN_COLLECTION: 16,\r\n /** Коллекция дат */\r\n DATE_TIME_COLLECTION: 17,\r\n /** Коллекция задач */\r\n TASK_COLLECTION: 18,\r\n /** Коллекция заданий */\r\n JOB_COLLECTION: 19,\r\n /** Коллекция папок */\r\n FOLDER_COLLECTION: 20,\r\n /** Коллекция документов */\r\n DOCUMENT_COLLECTION: 21,\r\n /** Коллекция записей справочника */\r\n REFERENCE_RECORD_COLLECTION: 22,\r\n /** Коллекция пользователей */\r\n USER_COLLECTION: 23,\r\n /** Коллекция групп пользователей */\r\n USER_GROUP_COLLECTION: 24,\r\n /** Коллекция ролей */\r\n USER_ROLE_COLLECTION: 25\r\n};\r\n\r\n/**\r\n * Режим открытия документа в мастере действий.\r\n *\r\n * @readonly\r\n * @enum {number} WIZARD_DOCUMENT_STEP_SHOW_MODE\r\n * @since 5.4.1.1000\r\n */\r\nwindow.WIZARD_DOCUMENT_STEP_SHOW_MODE = {\r\n /** Открывать содержимое документа */\r\n BODY: 0,\r\n /** Открывать карточку документа */\r\n CARD: 1\r\n};\r\n\r\n/**\r\n * Операции, доступные для токена.\r\n *\r\n * @readonly\r\n * @enum {number} TOKEN_OPERATION\r\n * @since 5.4.2.2000\r\n */\r\nwindow.TOKEN_OPERATION = {\r\n /** Токен для операции получения тела документа */\r\n DOWNLOAD_DOCUMENT_BODY: 1,\r\n /** Токен для операции открытия карточки документа */\r\n UPLOAD_DOCUMENT_BODY: 2,\r\n /** Токен для операции обновления Агента */\r\n UPDATE_AGENT: 4,\r\n /** Токен для операции подписания документа */\r\n SIGN_DOCUMENT: 8,\r\n /** Токен для операции подписания задачи или задания */\r\n SIGN_TASK: 8,\r\n /** Токен для операции получения списка новых заданий */\r\n GET_NEW_JOB_LIST: 16,\r\n /** Токен для операции блокировки тела документа */\r\n LOCK_VERSION: 32,\r\n /** Токен для операции разблокировки тела документа */\r\n UNLOCK_VERSION: 64,\r\n /** Токен для операции получения зашифрованного сессионного ключа */\r\n GET_ENCRYPTION_KEY: 128,\r\n /** Токен для операции диагностики */\r\n DIAGNOSTICS: 1073741824\r\n};\r\n\r\n/**\r\n * Константы из бэкенда для explorer\r\n *\r\n * @readonly\r\n * @enum {number} EXPLORER\r\n * @since 5.6.0.9009\r\n */\r\nwindow.EXPLORER = {\r\n /** Максимальное кол-во строк в списке объектов */\r\n /** Должна быть равна NpoComputer.WebAccess.Constants.MAX_OBJECT_ROWS_COUNT */\r\n MAX_OBJECT_ROWS_COUNT: 23,\r\n};\r\n\r\n/**\r\n * События страницы.\r\n * Используются для генерации событий из React-компонент.\r\n *\r\n * @readonly\r\n * @enum {string} PAGE_EVENTS\r\n */\r\nwindow.PAGE_EVENTS = {\r\n /** До переключения вкладки */\r\n ON_BEFORE_TAB_CHANGE: 'OnBeforeTabChange',\r\n /** При изменении модели вкладки карточки (для вызова рендера реактивной окмпоненты вне CardTab */\r\n TAB_MODEL_CHANGE: 'cardTabStateTabChange',\r\n /** До генерации страницы на основании новой модели */\r\n TAB_ON_BEFORE_RENDER_NEW_MODEL: 'tabOnBeforeRenderNewModel',\r\n /** После генерации страницы на основании новой модели */\r\n TAB_ON_AFTER_RENDER_NEW_MODEL: 'tabOnAfterRenderNewModel',\r\n /** Переключение периода на вкладке \"История\" карточки объекта */\r\n TOGGLE_PERIOD: 'togglePeriod',\r\n /** Окончание инициализации кнопок панели действий */\r\n TOOLBAR_BUTTONS_INIT_DONE: 'toolbarButtonsInitDone',\r\n /** Окончание инициализации групп кнопок панели действий */\r\n TOOLBAR_GROUPS_INIT_DONE: 'toolbarGroupsInitDone',\r\n};\r\n\r\n/**\r\n * Длина разметки, с которой начинает падать Firefox c ошибкой ns_error_illegal_value.\r\n *\r\n * @readonly\r\n * @since 5.6.0.9054\r\n */\r\nwindow.MAIN_TAB_CONTENT_SAFE_LENGTH = 65536;\r\n\r\n/**\r\n * Настройки отправки статистики\r\n *\r\n * @readonly\r\n * @enum {number} STATISTICS\r\n * @since 5.6.0.9054\r\n */\r\nwindow.STATISTICS = Object.freeze({\r\n /** Мин. интервал обработки событий статистики, мс.\r\n * Из всех событий, поступивших в течение этого интервала, на отправку уйдёт только последнее. */\r\n DEBOUNCE_INTERVAL: 200,\r\n /** Мин. интервал отправки статистики, мс. */\r\n REQUEST_INTERVAL: 10 * 1000,\r\n /** Мин. количество событий в одном запросе к серверу.\r\n * Если стек уже собрался, но REQUEST_INTERVAL ещё не прошёл, стекаем события дальше. */\r\n STACK_SIZE: 10,\r\n});\r\n\r\n/**\r\n * Режимы отображения папки.\r\n *\r\n * @readonly\r\n * @enum {number} FOLDER_MODE\r\n * @since 5.6.0.9057\r\n */\r\nwindow.FOLDER_MODE = Object.freeze({\r\n /** Не определен */\r\n NONE: 0,\r\n /** Обложка. */\r\n COVER: 1,\r\n /** Список. */\r\n LIST: 2,\r\n /** Грид. */\r\n GRID: 3,\r\n});\r\n\r\n/**\r\n * Константы, относящиеся к режиму грида объектов проводника.\r\n *\r\n * @readonly\r\n * @enum {string, number} FOLDER_GRID\r\n * @since 5.6.0.9057\r\n */\r\nwindow.FOLDER_GRID = Object.freeze({\r\n /** Ключ объекта настроек ширин колонок грида в localStorage. */\r\n WIDTHS_STORAGE_KEY: 'folderGridWidths',\r\n /** Ключ сохранённого режима отображения папки. */\r\n FOLDER_MODE_KEY: '##m',\r\n /** URL-параметр для режима отображения папки. */\r\n FOLDER_MODE_URL_PARAM: 'fmode',\r\n /** Значение ширины колонки по умолчанию, px. */\r\n DEFAULT_COLUMN_WIDTH: 200,\r\n /** Минимальная ширина колонки, px. */\r\n MIN_COLUMN_WIDTH: 24,\r\n /** Максимальная ширина колонки, px. */\r\n MAX_COLUMN_WIDTH: 1024,\r\n});\r\n\r\n/**\r\n * Фильтры дерева состояний.\r\n *\r\n * @readonly\r\n * @enum {string, number} STATETREE_FILTER\r\n * @since 5.6.1.9000\r\n */\r\nwindow.STATETREE_FILTER = Object.freeze({\r\n /** Все */\r\n ALL: 0,\r\n /** В работе */\r\n RUNNING: 1,\r\n /** Задачи */\r\n JOBS: 2,\r\n /** Просроченные */\r\n OUTDATED: 3,\r\n /** Непрочитанные */\r\n UNREAD: 4,\r\n});\r\n","'use strict';\r\n\r\n/**\r\n * Иконки для разных типов объектов.\r\n *\r\n * @readonly\r\n * @enum {string} ICONS\r\n * @since 5.7\r\n */\r\nwindow.ICONS = Object.freeze({\r\n Job: 'job-32',\r\n Task: 'task-32',\r\n Notice: 'notice-32',\r\n ControlJob: 'jobControl-32',\r\n});\r\n","var ContextMenu;\r\n\r\n(function ($) {\r\n\r\n var panel = $('
');\r\n var init = false;\r\n var panel_added = false;\r\n var scrollDirection;\r\n var scrollStep = 25;\r\n\r\n function ensurePanelAdded() {\r\n if (!panel_added) {\r\n panel_added = true;\r\n $(\"body\").append(panel.mousedown(function (ev) { ev.stopPropagation() }));\r\n }\r\n }\r\n\r\n function showPanel(panel) {\r\n panel.removeClass(\"contextmenu-container__hidden\").redraw();\r\n }\r\n\r\n function hidePanel(panel) {\r\n if (!panel.hasClass(\"contextmenu-container__hidden\")) {\r\n panel.addClass(\"contextmenu-container__hidden\");\r\n if (panel.data('contextMenu') && panel.data('contextMenu').onHide) {\r\n panel.data('contextMenu').onHide.call(panel.data('contextMenu'));\r\n }\r\n }\r\n }\r\n\r\n function hideAllPanels() {\r\n $('.contextmenu-container').each(function () {\r\n hidePanel($(this));\r\n });\r\n }\r\n\r\n function getOffset(elem) {\r\n return elem.offset();\r\n }\r\n\r\n function doInit() {\r\n $(function () {\r\n if (!$.ipad)\r\n $(\"body\").mousedown(function () { ContextMenu.hide(); });\r\n })\r\n }\r\n\r\n $.fn.contextMenu = function (menu, eventName) {\r\n if (typeof eventName == \"undefined\")\r\n eventName = \"click\";\r\n $(this).off(eventName).on(eventName, function () { menu.toggle(this, panel) });\r\n return this;\r\n }\r\n\r\n var defaults = {\r\n width: 200,\r\n arrowWidth: 15,\r\n shiftX: 0,\r\n shiftY: 20,\r\n cssClass: \"\",\r\n arrowImage: \"ArrowRight.png\"\r\n }\r\n\r\n ContextMenu = function (items, options) {\r\n if (!init) {\r\n init = true;\r\n doInit();\r\n }\r\n this.items = items;\r\n $.extend(this, defaults, options);\r\n }\r\n\r\n ContextMenu.hide = function (el) {\r\n var p = panel;\r\n if (el) p = $(el).parents('div.contextmenu-container').first();\r\n hidePanel(p);\r\n }\r\n\r\n ContextMenu.hideAll = function () {\r\n hideAllPanels();\r\n }\r\n\r\n $.extend(ContextMenu.prototype, {\r\n toggle: function (elem, _panel) {\r\n if (typeof _panel == \"undefined\")\r\n _panel = panel;\r\n ensurePanelAdded();\r\n if (!panel.hasClass(\"contextmenu-container__hidden\")) {\r\n hidePanel(_panel);\r\n }\r\n else\r\n this.show(elem, _panel);\r\n },\r\n show: function (elem, _panel, opt_event) {\r\n this.targetElement = elem;\r\n\r\n var el = $(elem);\r\n if (scrollStep < 0) scrollStep = -scrollStep;\r\n if (typeof _panel == \"undefined\")\r\n _panel = panel;\r\n this.lastPanel = _panel;\r\n this.lastElement = el;\r\n _panel = $(_panel);\r\n ensurePanelAdded();\r\n _panel.data('contextMenu', this);\r\n this.fillContainer(_panel, opt_event);\r\n var coords = this.getCoordsFor(getOffset(el), _panel, true);\r\n coords.top = Math.floor(coords.top);\r\n //logDebug(coords.top);\r\n if (coords.top < 0) coords.top = 10;\r\n this.tuneContainer(_panel, coords, true);\r\n if (this.onShow) {\r\n var ok = this.onShow.call(this);\r\n if (ok === false)\r\n return;\r\n }\r\n if ($.ipad) {\r\n $('html').one('mousedown', function (ev) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n $('.contextmenu__manualhide').click();\r\n });\r\n }\r\n\r\n showPanel(_panel);\r\n },\r\n\r\n showAt: function (coords, _panel, isInternal, opt_event) {\r\n\r\n if (scrollStep < 0) scrollStep = -scrollStep;\r\n if (!_panel)\r\n _panel = panel;\r\n this.lastPanel = _panel;\r\n ensurePanelAdded();\r\n _panel.data('contextMenu', this);\r\n this.fillContainer(_panel, opt_event);\r\n coords.left -= defaults.shiftX;\r\n coords.top -= defaults.shiftY;\r\n coords.left += this.shiftX;\r\n coords.top += this.shiftY;\r\n if (!isInternal) {\r\n coords = this.getCoordsFor(coords, _panel, false);\r\n }\r\n //logDebug(coords.top);\r\n if (coords.top < 0) coords.top = 10;\r\n this.tuneContainer(_panel, coords);\r\n if (this.onShow) {\r\n var ok = this.onShow.call(this);\r\n if (ok === false)\r\n return;\r\n }\r\n showPanel(_panel);\r\n },\r\n\r\n fillContainer: function (_panel, event) {\r\n\r\n var scroller = $('
', { id: \"menuscroller\", style: \"overflow: auto;\" });\r\n var imageArrowUp = $('').css('background', 'silver').css('cursor', 'pointer');\r\n var divArrowUp = $('
').css('position', 'fixed').hide();\r\n divArrowUp.append(imageArrowUp);\r\n\r\n scroller.html(this.render(_panel, $.ipad, event));\r\n var imageArrowDown = $('').css('background', 'silver').css('cursor', 'pointer');\r\n var divArrowDown = $('
').css('position', 'fixed').hide();\r\n divArrowDown.append(imageArrowDown);\r\n _panel.html(divArrowUp).append(scroller).append(divArrowDown).css('height', scroller.height());\r\n },\r\n\r\n tuneContainer: function (_panel, coords, padLeft) {\r\n var scroller = $('#menuscroller', _panel);\r\n var divArrowDown = $('#arrowDown', _panel);\r\n var divArrowUp = $('#arrowUp', _panel);\r\n var imageArrowDown = divArrowDown.find('img');\r\n var imageArrowUp = divArrowUp.find('img');\r\n\r\n var wheel = function (e) {\r\n var scroller = $('#menuscroller');\r\n var delta = 0;\r\n e = e ? e : window.event;\r\n // Установим кроссбраузерную delta\r\n if (e.wheelDelta) {\r\n // IE, Opera, safari, chrome - кратность дельта равна 120\r\n delta = e.wheelDelta / 120;\r\n } else if (e.detail) {\r\n // Mozilla, кратность дельта равна 3\r\n delta = -e.detail / 3;\r\n }\r\n\r\n var cancelEvent = function (e) {\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n e.cancelBubble = true;\r\n e.cancel = true;\r\n e.returnValue = false;\r\n return false;\r\n };\r\n\r\n scroller.scrollTop(scroller.scrollTop() - 20 * delta);\r\n return cancelEvent(e);\r\n };\r\n\r\n if (coords.top >= 34) {\r\n var top = coords.top;\r\n if (top + _panel.height() + 34 > window.innerHeight) top -= (top + _panel.height() - window.innerHeight) + 40;\r\n _panel.attr('style', '').css({ left: coords.left + \"px\", top: top + \"px\" });\r\n scroller.attr('style', '');\r\n divArrowDown.hide();\r\n divArrowUp.hide();\r\n if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', wheel, false);\r\n window.onmousewheel = document.onmousewheel = null;\r\n } else {\r\n if (_panel.height() > $(window).height() - 10) { // если контекстное меню не влазит в окно, то урезаем его\r\n _panel.css({\r\n left: coords.left + \"px\",\r\n top: \"15px\",\r\n height: $(window).height() - 20 + \"px\",\r\n position: \"fixed\",\r\n overflow: \"hidden\"\r\n });\r\n imageArrowDown.css({ width: _panel.width(), background: \"silver\" }).show();\r\n imageArrowUp.css({ width: _panel.width(), background: \"silver\" }).show();\r\n if (!$.ipad) {\r\n divArrowDown.css({ position: \"fixed\", top: _panel.height() + 7 + \"px\" }).show();\r\n divArrowUp.css({ position: \"fixed\", top: 7 + \"px\" }).show();\r\n scroller.css({ overflow: \"hidden\", height: _panel.height() });\r\n if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false);\r\n window.onmousewheel = document.onmousewheel = wheel; // IE, Opera.\r\n } else {\r\n var padding = WA.ENV.isAndroid() ? Math.max(0, coords.left - _panel.width() - 5) : coords.left + 25;\r\n _panel.attr('style', '').css({ left: padding + \"px\", top: \"10px\" });\r\n _panel.css('height', $(window).height() - 20 + \"px\");\r\n divArrowDown.css({ position: \"fixed\", top: _panel.height() + \"px\" }).show();\r\n divArrowUp.css({ position: \"fixed\", top: 8 + \"px\" }).css('z-index', '100000').show();\r\n scroller.css({ overflow: \"auto\", paddingTop: \"5px\", height: _panel.height() - 10, width: $(window).width() + 100 }).addClass('contextmenu_scroller');\r\n if (!WA.ENV.isAndroid()) var contextMenuScroll = new iScroll('menuscroller', { useTransform: true });\r\n if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', wheel, false);\r\n window.onmousewheel = document.onmousewheel = null;\r\n }\r\n } else { // иначе просто сдвигаем\r\n var padding = WA.ENV.isAndroid() ? Math.max(0, coords.left - _panel.width() - 5) : coords.left + 25;\r\n _panel.attr('style', '').css({ left: padding + \"px\", top: \"10px\" });\r\n scroller.attr('style', '');\r\n divArrowDown.hide();\r\n divArrowUp.hide();\r\n if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', wheel, false);\r\n window.onmousewheel = document.onmousewheel = null;\r\n }\r\n }\r\n\r\n scroller.scroll(wheel);\r\n divArrowDown.click(function (ev) {\r\n scroller.scrollTop(scroller.scrollTop() + scrollStep);\r\n });\r\n divArrowUp.click(function (ev) {\r\n scroller.scrollTop(scroller.scrollTop() - scrollStep);\r\n });\r\n var autohide;\r\n $('.contextmenu-container')\r\n .off('mouseenter.contextmenu')\r\n .off('mouseleave.contextmenu')\r\n .on('mouseenter.contextmenu', function () { if (autohide) clearTimeout(autohide); })\r\n .on('mouseleave.contextmenu', function (ev) {\r\n var jContainer = $(this);\r\n\r\n var target = ev.target;\r\n // IE10 наведение на SVG внутри меню воспринимает как уход с контекстного меню и вызывает это событие. \r\n // В IE10 c SVG работать надо не так как обычно https://stackoverflow.com/questions/33672395/use-within-svg-not-finding-closest-div-in-ie\r\n if (target.correspondingUseElement) {\r\n return;\r\n } \r\n\r\n var jContextMenuTable = jContainer.find('table.contextmenu');\r\n autohide = setTimeout(function () {\r\n ContextMenu.hide(jContextMenuTable);\r\n if (window.addEventListener) window.removeEventListener('DOMMouseScroll', wheel, false);\r\n window.onmousewheel = document.onmousewheel = null;\r\n }, 500);\r\n\r\n });\r\n },\r\n\r\n render: function (_panel, isTablet, event) {\r\n var body = $(\"
\").addClass(this.cssClass).css('width', this.width);\r\n if (this.id)\r\n body.attr(\"id\", this.id);\r\n var _this = this;\r\n $.each(_this.items,\r\n function () {\r\n body.append($(\"\").append($(\"\").append(_this.renderItem(this, _panel, $.ipad, event))));\r\n });\r\n if ($.ipad) body.append($('' + L(\"CLOSE\") + ''));\r\n return body;\r\n },\r\n\r\n renderItem: function (it, _panel, isTablet, event) {\r\n var _this = this;\r\n var item = {};\r\n $.extend(item, it);\r\n var proxy = _this.self;\r\n if (typeof proxy == \"undefined\")\r\n proxy = { item: item, menu: _this };\r\n if (item.jsaction) {\r\n item.jsaction = new Function(item.jsaction);\r\n }\r\n if (item.oncreate) {\r\n item.oncreate = new Function(item.oncreate);\r\n }\r\n var cont;\r\n var res = $(\"
\");\r\n if (item.onCreate)\r\n item.onCreate.call(res, item, _this);\r\n if (item.oncreate) {\r\n var upd = item.oncreate.call(proxy);\r\n if (typeof upd == \"object\") {\r\n for (var i in upd) {\r\n item[i] = upd[i];\r\n }\r\n }\r\n }\r\n\r\n if (item.visibility === \"hidden\") {\r\n return;\r\n }\r\n\r\n if (item.text) {\r\n item.text = L(item.text);\r\n }\r\n item.separator = item.separator || item.bottomSeparator;\r\n if (item.separator) {\r\n res.addClass('contextmenu__item_bottomseparator');\r\n }\r\n switch (item.type) {\r\n /*Пункт меню - простой текст.*/\r\n case 'text':\r\n res.html(\"
\" + L(item.text) + \"
\");\r\n break;\r\n\r\n /*Стандартный пункт меню.*/\r\n default:\r\n var tbl = $(\"
\");\r\n if (item.href) {\r\n cont = $(\"\");\r\n res.append(cont);\r\n }\r\n else {\r\n cont = res;\r\n }\r\n cont.append(tbl);\r\n\r\n if (item['tooltip']) tbl.attr(\"title\", item['tooltip']);\r\n\r\n item['default'] = item['default'] || item.isDefault;\r\n item.disabled = item.disabled || item.isDisabled;\r\n if (item['default'])\r\n res.addClass('contextmenu__item_default');\r\n if (item.disabled)\r\n res.addClass(\"contextmenu__item_disabled\");\r\n if (item.selected) {\r\n res.addClass('contextmenu__item_selected');\r\n }\r\n var tr = $(\"\");\r\n tbl.append(tr);\r\n\r\n\r\n // Иконка действия.\r\n item.icon = item.icon || item.image;\r\n item.iconx = item.iconx || item.imageX;\r\n item.icony = item.icony || item.imageY;\r\n // Иконка при наведении.\r\n item.hoverIcon = item.hoverIcon || item.hoverImage;\r\n item.hoverIconX = item.hoverIconX || item.hoverImageX;\r\n item.hoverIconY = item.hoverIconY || item.hoverImageY;\r\n\r\n var imgCell = $('');\r\n tr.append(imgCell);\r\n cont = imgCell;\r\n\r\n // Добавляем скрытую иконку при наведении.\r\n if (item.hoverIcon) {\r\n cont.append(this.renderImage(item.hoverIcon, item.hoverIconX, item.hoverIconY, item.iconHoverCSSClass, true));\r\n }\r\n // Добавляем иконку действия.\r\n cont.append(this.renderImage(item.icon, item.iconx, item.icony, item.iconCSSClass, false));\r\n\r\n var textCell = $(\"\").html(item.text);\r\n tr.append(textCell);\r\n\r\n if (!item.disabled) {\r\n var _event = _.clone(event);\r\n tbl.click(function (ev) {\r\n if (Core.isStatisticEnabled && WA.CR && WA.CR.statistics) {\r\n ///Запись в статистику\r\n WA.CR.statistics.write({\r\n page: WA.getLocation(),\r\n action: item.stataction || item.name || item.id || 'ContextMenuItem',\r\n area: 'ContextMenu',\r\n target: $(_this.targetElement).get(0) || (!!proxy.tr && proxy.tr.get(0))\r\n });\r\n };\r\n\r\n if (item.onClick || item.href || item.jsaction) {\r\n if (item.onClick) item.onClick.call(this, item, _this, _event);\r\n if (item.jsaction) item.jsaction.call(proxy);\r\n hideAllPanels();\r\n }\r\n ev.stopPropagation();\r\n return true;\r\n });\r\n }\r\n if (item.subMenu) {\r\n var arrowCell = $(\"\").css({ width: this.arrowWidth + \"px\" });\r\n arrowCell.append(\"

\");\r\n tr.append(arrowCell);\r\n var subPanel = $(\"
\").css({ zIndex: parseInt(_panel.css(\"zIndex\"), 10) + 1 });\r\n item.showSubMenu = function () {\r\n var $this = res;\r\n var coords = getOffset($this);\r\n coords.left += $this.width() - 5;\r\n coords.top -= 1;\r\n var parentCoords = getOffset(_panel);\r\n coords.left -= parentCoords.left;\r\n coords.top -= parentCoords.top;\r\n item.subMenu.parentItem = item;\r\n item.subMenu.showAt(coords, subPanel, true);\r\n };\r\n item.hideSubMenu = function () { hidePanel(subPanel) };\r\n res.mouseenter(item.showSubMenu);\r\n res.mouseleave(item.hideSubMenu);\r\n res.append(subPanel);\r\n }\r\n tbl.hover(function () {\r\n tbl.addClass(\"hover\");\r\n }, function () {\r\n tbl.removeClass(\"hover\")\r\n });\r\n break;\r\n }\r\n return res;\r\n },\r\n renderImage: function (icon, iconx, icony, iconCSSClass, isHover) {\r\n var jIcon = null;\r\n if (icon) {\r\n var cssClass = 'contextmenu-item__icon' + (isHover ? ' contextmenu-item__icon_onhover' : '') + (iconCSSClass ? ' contextmenu-item__icon_' + iconCSSClass : '');\r\n if (icon.indexOf(\"App_Sprites\") !== -1) {\r\n if (typeof iconx != \"undefined\") {\r\n jIcon = $('
').css({ backgroundImage: \"url('\" + icon + \"')\", backgroundPosition: (-iconx) + \"px \" + (-icony) + \"px\", backgroundRepeat: \"no-repeat\" });\r\n } else {\r\n jIcon = $('');\r\n }\r\n } else {\r\n jIcon = $('');\r\n }\r\n }\r\n return jIcon;\r\n },\r\n getCoordsFor: function (c0, _panel, useShift) {\r\n //var c0 = getOffset($(elem));\r\n var res = { left: c0.left + (useShift ? this.shiftX : 0), top: c0.top + (useShift ? this.shiftY : 0) };\r\n var w = _panel.width();\r\n var h = _panel.height();\r\n var ww = windowWidth();\r\n var scr = $('body').scrollLeft();\r\n if (scr) {\r\n ww += scr - 20;\r\n }\r\n var hh = windowHeight();\r\n\r\n if (res.left + w > ww - 5) {\r\n res.left = ww - 5 - w;\r\n }\r\n if (res.left < 0) {\r\n res.left = 0;\r\n }\r\n if ((res.top - $(window).scrollTop()) + h > hh && c0.top - $(window).scrollTop() - h >= 0 || res.top + h > $(window).height()) {\r\n res.top = c0.top - h;\r\n }\r\n return res;\r\n },\r\n lastPanelVisible: function () {\r\n return this.lastPanel && this.lastPanel.css(\"visibility\") != \"hidden\";\r\n },\r\n getItemById: function (id) {\r\n var res = null;\r\n $.each(this.items, function () {\r\n if (this.id == id) {\r\n res = this;\r\n return false;\r\n }\r\n });\r\n return res;\r\n }\r\n })\r\n\r\n})(jQuery);\r\n","let CT;\r\nwindow.ControlTemplate = CT = { \"Description\": \"Html-шаблоны для динамических контролов\" };\r\n\r\nCT.toolBar = {};\r\nCT.sideBar = {};\r\nCT.form = {};\r\nCT.dialog = {};\r\n\r\n/**\r\n* Шаблон кнопки панели инструментов\r\n*\r\n* @param {string} 1 name\r\n* @param {string} 2title\r\n* @param {string} 3 onclick action\r\n* @param {string} 4 icon\r\n* @return buttonTemplate\r\n*/\r\nCT.toolBar.button =\r\n `
\r\n

\r\n {1}\r\n
`;\r\n// Если иконка находится в атласе svg\r\nCT.toolBar.buttonSvg =\r\n `
\r\n \r\n \r\n \r\n {1}\r\n
`;\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n// language=HTML\r\n/**\r\n* Шаблон Группы панели инструментов\r\n*\r\n* @param {string} 0 name\r\n* @param {string} 1 title\r\n* @param {string} 2 icon\r\n* @return buttonTemplate\r\n*/\r\nCT.toolBar.group =\r\n `
\r\n
\r\n

\r\n {1}\r\n \r\n \r\n \r\n
\r\n
`;\r\nCT.toolBar.groupSvg =\r\n `
\r\n
\r\n \r\n \r\n \r\n {1}\r\n \r\n \r\n \r\n
\r\n
`;\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Панелька для свернутой группы кнопок\r\n*\r\n* @param {string} 0 index\r\n* @param {string} 1 size\r\n*/\r\nCT.toolBar.groupCollapsed = '
';\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Закладка боковой панели\r\n*\r\n* @param {string} 0 name\r\n* @param {string} 1 text\r\n* @param {string} 2 icon\r\n* @param {string} 3 cssClass\r\n*/\r\nCT.sideBar.tab = '
\\\r\n
\\\r\n

\\\r\n {1} \\\r\n \\\r\n
\\\r\n
';\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Кнопка действия поиска в шапке сайта.\r\n*\r\n* @param {string} 0 name\r\n* @param {string} 1 text\r\n* @param {string} 2 icon\r\n* @param {string} 3 tooltip\r\n*/\r\nCT.sideBar.search = '
\\\r\n
\\\r\n \\\r\n \\\r\n \\\r\n {1} \\\r\n
\\\r\n
';\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n/**\r\n* Закладка(контейнер на карточке)\r\n*\r\n* @param {string} 0 name\r\n*/\r\n\r\nCT.form.tab = '
\\\r\n
';\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n/**\r\n* Разметка новой закладки\r\n*\r\n* @param {string} 0 title\r\n* @param {string} 1 helpText\r\n* @param {string} 2 manualLink\r\n*/\r\n\r\nCT.form.tabHelp = '

{0}

\\\r\n
\\\r\n

{1}

\\\r\n {2} \\\r\n ';\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\nCT.dialog.selectedItemsArea = '
\\\r\n
{label}:
\\\r\n
\\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n {data} \\\r\n
{name}{option_name}
\\\r\n
\\\r\n
';\r\n\r\n\r\nCT.dialog.selectedItem = ' \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n
\\\r\n {name} \\\r\n
\\\r\n \\\r\n \\\r\n {option} \\\r\n \\\r\n ';\r\n\r\nCT.dialog.availableItemsArea = '
\\\r\n
{label}:
\\\r\n
\\\r\n \\\r\n

\\\r\n
\\\r\n
\\\r\n
{placeholder_message}
\\\r\n
\\\r\n
\\\r\n {data} \\\r\n
\\\r\n
';\r\n\r\nCT.dialog.availableItem = '
\\\r\n \\\r\n

{name}

\\\r\n \\\r\n
';\r\n\r\n\r\n\r\nCT.dialog.emptyPlaceholder = '{message}';\r\n\r\nCT.dialog.sortingButtons = '

\\\r\n

';\r\n\r\n\r\nCT.dialog.sortButtons = '
\\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n
';\r\n","\"use strict\";\r\n\r\n/** \r\n* Базовый объект с поддержкой событий.\r\n*\r\n* @class BaseObject\r\n* @abstract\r\n* @property {string} className Имя класса\r\n* @property {Class} class Ссылка на интерфейс класса для упрощённого доступа к статическим свойствам (например, EVENT).\r\n* @param {any} Данные\r\n*/\r\nvar BaseObject = Class.extend({\r\n\r\n init: function (data) {\r\n if (!this._events) {\r\n this._events = [];\r\n }\r\n this.fire(BaseObject.EVENT.CLASS_INIT, this);\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property BaseObject#className\r\n */\r\n className: \"BaseObject\",\r\n\r\n /**\r\n * Сообщение об ошибке при использовании устаревшего метода.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarGroup#_deprecatedMethodUsageMessage\r\n */\r\n _deprecatedMethodMessageTemplate: 'Method {0} is deprecated.',\r\n\r\n /** @private */\r\n _events: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пред-обработка переданных параметров\r\n * @method BaseObject#_parseArguments\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _parseArguments: function (args) {\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вывести предупреждение об использовании устаревшего метода.\r\n *\r\n * @method _warnAboutDeprecatedMethod\r\n * @param {string} methodName Имя метода.\r\n * @param {string} [messageTemplate = this._deprecatedMethodMessageTemplate] Шаблон сообщения об использовании устаревшего метода\r\n * @private\r\n */\r\n _warnAboutDeprecatedMethod(methodName, messageTemplate = this._deprecatedMethodMessageTemplate) {\r\n console.warn(format(messageTemplate, methodName));\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @private\r\n * @method BaseObject#_simplifyName\r\n */\r\n _simplifyName: function (name) {\r\n name = \"\" + name;\r\n name = name.makeSafeString().toLowerCase();\r\n if (name.substr(0, 2) === 'on') {\r\n name = name.substr(2, name.length);\r\n };\r\n return name;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Привязать функцию к событию.\r\n * @method BaseObject#bind\r\n * @param {string} name Имя события\r\n * @param {function} callback Функция, срабатывающая при событии\r\n * @param {object} [opt_context] Контекст исполнения\r\n * @return {BaseObject} Объект типа BaseObject.\r\n */\r\n bind: function (name, func, opt_context) {\r\n name = this._simplifyName(name);\r\n\r\n if (window.ENABLE_EVENTS_LOGGING) {\r\n //Шамов А.: Для отладки событий.\r\n console.log('BaseObject.bind ' + name, arguments);\r\n }\r\n\r\n if (!this._events) {\r\n this._events = [];\r\n }\r\n\r\n if (this._events) {\r\n if (!this._events[name]) {\r\n this._events[name] = [];\r\n }\r\n func = !!opt_context ? $.proxy(func, opt_context) : func;\r\n this._events[name].push(func);\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Удалить функцию, привязанную к событию.\r\n *\r\n * @method BaseObject#unbind\r\n * @param {string} name Имя события\r\n * @return {BaseObject} Объект типа BaseObject.\r\n */\r\n unbind: function (name) {\r\n name = this._simplifyName(name);\r\n\r\n if (window.ENABLE_EVENTS_LOGGING) {\r\n //Шамов А.: Для отладки событий.\r\n console.log('BaseObject.unbind ' + name, arguments);\r\n }\r\n this._events[name] = [];\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вызвать событие.\r\n *\r\n * @method BaseObject#fire\r\n * @param {string} Имя события\r\n * @return {boolean} Метод вернет False, если хотя бы один из обработчиков метода bind вернул False. \r\n * При этом условии другие обработчики событий вызваны не будут. \r\n */\r\n fire: function (name) {\r\n name = this._simplifyName(name);\r\n\r\n //Шамов А.: Для отладки событий.\r\n if (window.ENABLE_EVENTS_LOGGING) {\r\n if (!WA.ENV.isTouch()) {\r\n console.log('BaseObject.fire ' + name, arguments);\r\n } else {\r\n //Шамов А.: Почему-то провоцирует ошибки на планшетах.\r\n //logDebug('BaseObject.fire ' + arguments[0]);\r\n }\r\n }\r\n\r\n // try {\r\n var args = $.makeArray(arguments);\r\n args.splice(0, 1);\r\n if (this._events && this._events[name]) {\r\n for (var i = 0, len = this._events[name].length; i < len; i++) {\r\n if ($.isFunction(this._events[name][i])) {\r\n var r = this._events[name][i].apply(this, args);\r\n if (typeof r != 'undefined' && !r) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /*} catch (ex) {\r\n console.trace()\r\n log.error('BASE_OBJECT', ex);\r\n return false;\r\n }*/\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Последовательно вызвать события BeforeEvent, Event, AfterEvent.\r\n *\r\n * @method BaseObject#fireAll\r\n * @param {string} eventName Имя события, переданное методу\r\n * @param {string} mainFunc Функция, срабатывающая при событии\r\n * @ignore\r\n */\r\n fireAll: function (eventName, mainFunc) {\r\n eventName = this._simplifyName(eventName);\r\n\r\n //Шамов А.: Для отладки событий.\r\n if (window.ENABLE_EVENTS_LOGGING) {\r\n if (!WA.ENV.isTouch()) {\r\n console.log('BaseObject.fireAll ' + eventName, arguments);\r\n } else {\r\n //Шамов А.: Почему-то провоцирует ошибки на планшетах.\r\n //logDebug('BaseObject.fireAll ' + eventName);\r\n }\r\n }\r\n\r\n var isRun = false;\r\n var me = this;\r\n var args = $.makeArray(arguments);\r\n args.splice(0, 2);\r\n\r\n // Обертка над callback с вызвовом Before и After событий.\r\n var mainFuncWrapper = function (result) {\r\n if (typeof result == 'undefined' || result) {\r\n mainFunc.apply(me, args);\r\n\r\n var newArgs = $.merge(['After' + eventName], args);\r\n me.fire.apply(me, newArgs);\r\n }\r\n isRun = true;\r\n };\r\n\r\n var newArgs = $.merge(['Before' + eventName, mainFuncWrapper], args);\r\n var r = me.fire.apply(me, newArgs);\r\n if (!isRun) {\r\n mainFuncWrapper(r);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить строковое представление объекта.\r\n *\r\n * @method BaseObject#asString\r\n * @since 5.0.0.7100\r\n * @return {string} Строковое представление объекта.\r\n */\r\n asString: function () {\r\n return $.toJSON(this);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n}, {\r\n EVENT: {\r\n /** Событие окончания инициализации экземпляра класса */\r\n CLASS_INIT: 'classInit',\r\n /** Событие нажатия на элемент, связанный с экземпляром класса */\r\n CLICK: 'click'\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n});","'use strict';\r\n\r\n/**\r\n * Абстрактный класс React-объекта.\r\n *\r\n * @abstract\r\n * @extends BaseObject\r\n * @since 5.6.0.1300\r\n */\r\nvar BaseReactObject = BaseObject.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @private\r\n * @method BaseReactObject#init\r\n * @param model Модель React-компоненты.\r\n * @fires BaseReactObject.EVENTS#CLASS_INIT\r\n */\r\n init: function (model) {\r\n this._model = model;\r\n this._events = this._model.event;\r\n this.fire(BaseReactObject.EVENT.CLASS_INIT, this);\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property BaseReactObject#className\r\n * @override\r\n * @see BaseObject#className\r\n */\r\n className: 'BaseReactObject',\r\n\r\n /**\r\n * Список обработчиков событий.\r\n *\r\n * @private\r\n * @property BaseReactObject#_events\r\n * @override\r\n * @see BaseObject#_events\r\n */\r\n _events: null,\r\n\r\n /**\r\n * Модель React-компоненты.\r\n *\r\n * @private\r\n * @property BaseReactObject#_model\r\n */\r\n _model: null\r\n});","\"use strict\";\r\n\r\n/**\r\n* Тип прав на объекты системы.\r\n* @since 5.0.0.4204\r\n* @readonly\r\n* @enum {string} ACCESS_RIGHTS\r\n* @example \r\n* WebAccess.task.setAttachmentsRights(ИДзадачи, ACCESS_RIGHTS.VIEW);\r\n*/\r\nvar ACCESS_RIGHTS = {\r\n /** Пусто. */\r\n EMPTY: 0,\r\n /** Нет доступа. */\r\n NO_ACCESS: 2,\r\n /** Просмотр. */\r\n VIEW: 4,\r\n /** Изменение. */\r\n CHANGE: 8,\r\n /** Полные права. */\r\n FULL: 16\r\n};\r\n\r\n\r\n/**\r\n* Типы поддерживаемых команд.\r\n* @since 5.0.0.1600\r\n* @enum {string} COMMAND_TYPE\r\n* @readonly\r\n*/\r\nvar COMMAND_TYPE = {\r\n SHOW_DIALOG: 1,\r\n END: 2,\r\n EXECUTE_SEARCH: 3,\r\n EXECUTE_JS_ACTION: 4,\r\n SHOW_MESSAGE_BOX: 5,\r\n SHOW_NOTIFICATION: 6,\r\n};\r\n\r\n/** \r\n* Базовый объект клиентской модели \r\n* @class BaseObjectModel\r\n* @extends BaseObject\r\n* @param {object} data Данные модели.\r\n* @property {string} className имя класса\r\n* @property {object} rawData загруженный json\r\n*/\r\nvar BaseObjectModel = BaseObject.extend({\r\n\r\n /**\r\n * Конструктор\r\n * @private\r\n */\r\n init: function (data) {\r\n this._super(data);\r\n //Если данные были переданы в коструктор, то загрузим их \r\n if (arguments.length > 0) this.load(data);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"BaseObjectModel\",\r\n rawData: {},\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /* \r\n * Загрузка данных текущего объекта\r\n * @method \r\n * @param {object} JSONData\r\n */\r\n load: function (JSONData) {\r\n // Создаем событие \"ДоЗагрузкиДанных\" - \r\n // может пригодиться если нам, вдруг, понадобиться подменить данные еще до включения в объект\r\n this.rawData = JSONData;\r\n this.fire(\"BeforeDataLoad\", this.rawData);\r\n // Загружаем данные \r\n $.extend(this, this.rawData);\r\n // Создаем событие \"ПослеЗагрузкиДанных\"\r\n this.fire(\"AfterDataLoad\", this.rawData);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовать ссылку на объект в объект типа WA.URL.\r\n *\r\n * @method WebAccess.mixins.linkMixin#toURL\r\n * @return {WebAccess.URL} Объект типа URL.\r\n */\r\n toURL: function () {\r\n var link = new WA.Link(this.ID, this.Type, this.ReferenceCode);\r\n var url = new WA.URL(link);\r\n if (this.IsNew) {\r\n url.setParam('mode', 'edit');\r\n };\r\n return url;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Запуск действия.\r\n * @since 5.0.0.1600\r\n * @function BaseObjectModel.executeAction\r\n * @param {string} actionName Имя действия.\r\n * @param {object|WebAccess.components.dialogs.FormDialog} [opt_params] Параметры действия или диалог, тогда значения реквизитов диалога скопируются в параметры объекта для работы действия.\r\n * @example \r\n * WebAccess.current.executeAction('ActionName').done(function() { console.log('Действие завершилось!'); });\r\n */\r\n executeAction(actionName, opt_params) {\r\n let entityLink = new WA.Link(this.ID, this.Type, this.ReferenceName);\r\n return WA.actions.executeAction(actionName, entityLink, this.form, opt_params)\r\n },\r\n\r\n /**\r\n * Выполняет прикладной метод.\r\n * @function BaseObjectModel.executeEntityMethod\r\n * @param {string} methodName Имя метода.\r\n * @param {object} [opt_parameters] Параметры, с которыми должен вызываться метод.\r\n * @since 5.5.0.1000\r\n \r\n * @example \r\n * WebAccess.current.executeEntityMethod('MethodName').done(function(result) { console.log(result); });\r\n */\r\n executeEntityMethod(methodName, opt_parameters) {\r\n throw new Error(\"Abstract method!\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Запуск действия с предварительный показов диалога.\r\n * @since 5.0.0.1901\r\n * @function BaseObjectModel.showDialogAndExecuteAction\r\n * @param {string} actionName Имя действия.\r\n * @param {string} dialogName Имя диалога.\r\n * @example \r\n * WebAccess.current.showDialogAndExecuteAction('ActionName','DialogName').done(function() { console.log('Действие завершилось!'); });\r\n */\r\n showDialogAndExecuteAction(actionName, dialogName) {\r\n let entityLink = new WA.Link(this.ID, this.Type, this.ReferenceName);\r\n return WA.actions.showDialogAndExecuteAction(actionName, dialogName, entityLink, this.form)\r\n },\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/**\r\n * Модель документа.\r\n *\r\n * @summary Часть свойств получается со стороны сервера и расширяет текущую модель.\r\n * @see NpoComputer.WebAccess.Models.EDocumentModel\r\n */\r\nvar DocumentModel = BaseObjectModel.extend({\r\n className: \"DocumentModel\",\r\n\r\n /**\r\n * Выполняет прикладной метод.\r\n * @function DocumentModel.executeEntityMethod\r\n * @param {string} methodName Имя метода.\r\n * @param {object[]} opt_parameters Параметры, с которыми должен вызываться метод.\r\n * @since 5.5.0.1000\r\n \r\n * @example \r\n * WebAccess.current.executeEntityMethod('MethodName', new WA.Link()).done(function(result) { console.log(result); });\r\n */\r\n executeEntityMethod: function (methodName, opt_parameters) {\r\n var d = $.Deferred();\r\n var me = this;\r\n var parameters = Array.prototype.slice.call(arguments, 1);\r\n\r\n WA.domainMethods.executeEntityMethod(\"/api/Document.asmx/ExecuteEntityMethod\",\r\n this.ID, \"\", methodName, parameters).done(function (res) {\r\n var changes = res.Changes;\r\n var changedMultiSelects = res.ChangedMultiSelectRequisitesValues;\r\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n\r\n d.resolve(res.MethodResult);\r\n }).fail(function (errorMessage, res) {\r\n if (res) {\r\n if (res.Result) {\r\n var data = res.Result;\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n }\r\n d.reject(res.Error);\r\n } else {\r\n d.reject(errorMessage);\r\n }\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Проверяет, доступен ли метод для текущего документа.\r\n * @function DocumentModel.isMethodAvailable\r\n * @param {string} methodName Имя метода.\r\n * @return {boolean} True – прикладной метод доступен для текущего документа, иначе False.\r\n * @since 5.5.0.1000\r\n */\r\n isMethodAvailable: function (methodName) {\r\n return WA.domainMethods.isMethodAvailable(\"/api/Document.asmx/IsEntityMethodAvailable\", this.ID, methodName);\r\n }\r\n});","var TaskModel = BaseObjectModel.extend({\r\n init: function (data) {\r\n this._super(data);\r\n },\r\n className: \"TaskModel\",\r\n\r\n start() {\r\n let model;\r\n let accessRights;\r\n if (WA.getLocation() !== 'task') {\r\n model = {\r\n TaskID: this.ID,\r\n Subject: this.Subject,\r\n ActiveText: '',\r\n Observers: this.Observers,\r\n Performers: this.Performers,\r\n JobKind: _getJobKind(),\r\n Deadline: this.Deadline || '',\r\n InitiatorId: this.InitiatorID,\r\n RouteType: '',\r\n Rights: '',\r\n IsEncyptEnabled: ''\r\n };\r\n accessRights = ACCESS_RIGHTS.EMPTY;\r\n }\r\n this.fireAll(\r\n 'Start',\r\n () => startTask(model, accessRights),\r\n WA.CR.StandardRouteCode,\r\n );\r\n },\r\n\r\n loadEvents: function (standardRouteEvents) {\r\n var me = this;\r\n var eventsForCurrentRoute = standardRouteEvents[ this.StandardRouteCode ]\r\n\r\n if (typeof eventsForCurrentRoute !== 'undefined' && typeof eventsForCurrentRoute.task !== 'undefined') {\r\n // грузим только события задачи.\r\n $.each(eventsForCurrentRoute.task, function (eventName, eventCallback) {\r\n me.bind(eventName, eventCallback);\r\n });\r\n }\r\n },\r\n\r\n // standardRouteCode указываем, если вызываем событие \"До запроса параметров\".\r\n fireAll: function (eventName, mainFunc, standardRouteCode) {\r\n function fire(eventName) {\r\n if (typeof WebAccess.Events[ standardRouteCode ] != 'undefined' && typeof WebAccess.Events[ standardRouteCode ].task != 'undefined') {\r\n var r = WebAccess.Events[ standardRouteCode ].task[ eventName ].call(this, arguments[ 1 ]);\r\n if (typeof r != 'undefined' && !r) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n if (typeof standardRouteCode != 'undefined') {\r\n var isRun = false;\r\n var me = this;\r\n\r\n // Обертка над callback с вызвовом Before и After событий.\r\n var mainFuncWrapper = function (result) {\r\n if (typeof result == 'undefined' || result) {\r\n mainFunc();\r\n me.fire('After' + eventName);\r\n }\r\n isRun = true;\r\n };\r\n\r\n var r = fire('Before' + eventName, mainFuncWrapper);\r\n if (!isRun) {\r\n mainFuncWrapper(r);\r\n }\r\n }\r\n else {\r\n // если не означен standardRouteId, то берем родительский fireAll (находимся в задаче и там все разруливается).\r\n this._super(eventName, mainFunc);\r\n }\r\n }\r\n});","var JobModel = BaseObjectModel.extend({\r\n className: \"JobModel\",\r\n\r\n // Загрузка событий блока ТМ-а\r\n loadEvents: function (standardRouteEvents) {\r\n var me = this;\r\n var currentStandardRouteEvents = standardRouteEvents[this.LeadTaskStandartRouteCode];\r\n // Найдем нужный объект (для текущего ТМ-а).\r\n if (typeof currentStandardRouteEvents != 'undefined') {\r\n // ... и только для конкретного блока. Если подходящего (по ИД) нет, то не биндим.\r\n if (typeof currentStandardRouteEvents.blocks[this.WorkflowBlockID] != 'undefined') {\r\n $.each(currentStandardRouteEvents.blocks[this.WorkflowBlockID], function (eventName, eventCallback) {\r\n me.bind(eventName, eventCallback);\r\n });\r\n }\r\n }\r\n },\r\n //Установка метода,который вызывается для всех заданий по ТМ перед запросом параметров\r\n bindBeforeAskingCommonEvent: function (commonEvent) {\r\n var me = this;\r\n if($.isFunction(commonEvent)) {\r\n me.bind('BeforeParamAsking', commonEvent);\r\n }\r\n },\r\n //Выполнение задания с результатом выполнения\r\n performResult: function (performResult) {\r\n Core.toolBars.job.performResult(performResult);\r\n }\r\n});\r\n\r\n/**\r\n* Тип задания.\r\n* @enum {integer} JOB_KIND\r\n* @readonly\r\n* @global\r\n*/\r\nvar JOB_KIND = {\r\n /** Задача */\r\n JOB: 0,\r\n /** Уведомление */\r\n NOTICE: 1,\r\n /** Задание-контроль */\r\n CONTROLJOB: 2\r\n};","// Наследуем свойства и методы базового объекта\nvar ReferenceRecordModel = BaseObjectModel.extend({\r\n className: \"ReferenceRecordModel\",\n\n /**\r\n * Выполняет прикладной метод.\r\n * @function ReferenceRecordModel.executeEntityMethod\r\n * @param {string} methodName Имя метода.\r\n * @param {object[]} opt_parameters Параметры, с которыми должен вызываться метод.\n * @since 5.5.0.1000\n \r\n * @example \r\n * WebAccess.current.executeEntityMethod('MethodName').done(function(result) { console.log(result); });\r\n */\r\n executeEntityMethod: function (methodName, opt_parameters) {\r\n var d = $.Deferred();\r\n var me = this;\r\n var parameters = Array.prototype.slice.call(arguments, 1);\n\n var viewName = me.ReferenceView === 'undefined' ? \"\" : me.ReferenceView;\n WA.domainMethods.executeEntityMethod(\"/api/Reference.asmx/ExecuteEntityMethod\",\n new WA.Link(this.ID, OBJECT_TYPE.REFERENCE_RECORD, this.ReferenceCode),\n viewName, methodName, parameters).done(function (res) {\r\n var changes = res.Changes;\n var changedMultiSelects = res.ChangedMultiSelectRequisitesValues;\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\n\n d.resolve(res.MethodResult);\r\n }).fail(function (errorMessage, res) {\r\n if (res) {\r\n if (res.Result) {\r\n var data = res.Result;\n var changes = data.Changes;\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n }\n d.reject(res.Error);\r\n } else {\r\n d.reject(errorMessage);\r\n }\r\n });\n\n return d.promise();\r\n },\r\n\r\n /**\r\n * Проверяет, доступнен ли метод для текущего справочника.\r\n * @function ReferenceRecordModel.isMethodAvailable\r\n * @param {string} methodName Имя метода.\r\n * @return {boolean} True – прикладной метод доступен для текущего справочника, иначе False.\n * @since 5.5.0.1000\r\n */\n isMethodAvailable: function (methodName) {\r\n return WA.domainMethods.isMethodAvailable(\"/api/Reference.asmx/IsEntityMethodAvailable\", new WA.Link(this.ID, OBJECT_TYPE.REFERENCE_RECORD, this.ReferenceCode), methodName);\r\n }\r\n});","// Наследуем свойства и методы базового объекта\r\nvar FolderModel = BaseObjectModel.extend({\r\n className: \"FolderModel\"\r\n});","var WizardModel = BaseObjectModel.extend({\r\n init: function (data) {\r\n this._super(data);\r\n },\r\n className: \"WizardModel\"\r\n});","\"use strict\";\r\n\r\n/**\r\n* Расширение\r\n* \r\n* @class Extension\r\n* @extends BaseObject\r\n* @property {string} name имя расширения\r\n* @param {string} itemSelector существующий элемент страницы\r\n*/\r\n(function (global) {\r\n var Extension = BaseObject.extend({\r\n init: function (data) {\r\n $.extend(this, data);\r\n },\r\n\r\n name: \"\",\r\n\r\n /**\r\n * Установить это в качестве текущего расширения\r\n * @method Extension#setAsCurrent\r\n */\r\n setAsCurrent: function () {\r\n if (WebAccess.getLocation() != \"explorer\") Ext_Click(this, this.name, true);\r\n else Ext_Click(this, this.name, false);\r\n },\r\n\r\n /**\r\n * Перезагрузка расширения\r\n * @method Extension#reload\r\n */\r\n reload: function () {\r\n ReloadExtension(this.name);\r\n }\r\n });\r\n \r\n global.Extension = Extension;\r\n})(window);\r\n","\"use strict\";\r\n(function () {\r\n /**\r\n * Базовое пространство имен.\r\n * Собственные функции данного пространства доступны сразу, например, raise. \r\n * Для запуска программы после инициализации всех компонентов WebAccess служит специальная функция WebAccess.ready(). \r\n *\r\n * Для доступа к дочерним пространствам имен, например current или extensions, необходимо сначала дождаться их инициализации. \r\n * Если необходимо обеспечить работу лишь с некоторыми из них, можно использовать публичные deferred-объекты, например SideBarInit, ToolBarInit. \r\n * @example\r\n * console.log(WebAccess.current); // Возвратит пустой объект.\r\n * WebAccess.ready(function() {\r\n * console.log(\"Иницализация завершена\");\r\n * console.log(this); //this = WebAccess;\r\n * console.log(WebAccess.current.toolBar); // Объект панели инструментов полностью инициализирован и заполнен.\r\n * console.log(WebAccess.current.sideBar); // Объект боковой панели полностью инициализирован и заполнен.\r\n * });\r\n *\r\n * // Если предполагается работа только с кнопками панели \r\n * // инструментов, можно не дожидаться инициализации всех компнентов.\r\n * $.when(WebAccess.ToolBarInit).done(function () {\r\n * console.log(\"Иницализация завершена\");\r\n * console.log(WebAccess.current.toolBar); // Объект панели инструментов полностью инициализирован и заполнен.\r\n * console.log(WebAccess.current.sideBar); // Может быть пустым и еще не инициализированным. \r\n * });\r\n * @global\r\n * @namespace WebAccess\r\n * @alias WA\r\n */\r\n var WebAccess = function () {\r\n var self = this;\r\n\r\n\r\n this._whenInitComplete = [];\r\n\r\n /**\r\n * Обработчик инициализации. Добавляет функцию в очередь на исполнение, когда объектная модель WebAccess готова к использованию.\r\n *\r\n * @function WebAccess.ready\r\n * @param {function} func Ссылка на функцию, которая будет вызвана немедленно по готовности объектной модели к использованию\r\n * @return {object} Объект WebAccess\r\n */\r\n this.ready = function (func) {\r\n if (!func) {\r\n WA.raise('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED', 'function');\r\n } else if (!$.isFunction(func)) {\r\n WA.raise('ERR_INVALID_PARAMETER_TYPE');\r\n } else {\r\n if (WA.Init.state() === 'pending') {\r\n this._whenInitComplete.push(func);\r\n } else {\r\n func.apply(this);\r\n }\r\n\r\n }\r\n return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Получить расширение файла из URL\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n this._getFileExtensionFromURL = function (url) {\r\n if (!url) return null;\r\n if (url.indexOf('.') === -1) return null;\r\n var parts = url.split(\"?\")[0].split('.');\r\n return parts[parts.length - 1];\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Динамическая подгрузка ресурсов. \r\n * Позволяет подключить сторонний JS файл или таблицу стилей CSS.\r\n * Загрузка JS-файлов или таблиц стилей CSS происходит синхронно в порядке очереди.\r\n *\r\n * @function WebAccess.include\r\n * @param {string} url Абсолютный или относительный путь к целевому файлу\r\n * @raise ERR_UNSUPPORTED_TYPE_RESOURCE - Данный тип ресурсов не поддерживается \r\n * @return WebAccess\r\n * @example \r\n * // Подключить сторонний файл General.js. \r\n * WebAccess.include('/js/Extension.RecordOffice/General.js');\r\n * // Подключить для соответствующих справочников необходимый файл для исполнения специфической логики их работы.\r\n * var refCode = WebAccess.current.getReferenceCode(); \r\n * switch (refCode) { \r\n * case 'РКК' : \r\n * WebAccess.include('/js/Extension.RecordOffice/RRCReference.js'); \r\n * break; \r\n * case 'RRCAssignments': \r\n * WebAccess.include('/js/Extension.RecordOffice/RRCAssignmentsReference.js'); \r\n * break; \r\n * case 'ГДЛ': \r\n * WebAccess.include('/js/Extension.RecordOffice/LogsReference.js'); \r\n * break; \r\n * case 'IndividualUserModuleSettings': \r\n * WebAccess.include('/js/Extension.RecordOffice/IndividualUserModuleSettingsReference.js'); \r\n * break; \r\n * };\r\n */\r\n this.include = function (url) {\r\n var type = this._getFileExtensionFromURL(url);\r\n switch (type) {\r\n case \"js\":\r\n $.ajaxSetup({ async: false, cache: true });\r\n $.getScript(url);\r\n $.ajaxSetup({ async: true, cache: false });\r\n break;\r\n case \"css\":\r\n var link = document.createElement(\"link\");\r\n link.setAttribute(\"rel\", \"stylesheet\");\r\n link.setAttribute(\"type\", \"text/css\");\r\n link.setAttribute(\"href\", url);\r\n document.getElementsByTagName(\"head\")[0].appendChild(link);\r\n break;\r\n default:\r\n this.raise(\"ERR_UNSUPPORTED_TYPE_RESOURCE\", type);\r\n break;\r\n }\r\n return this;\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n \r\n\r\n /**\r\n * Предоставляет доступ к информации о веб-модулях и средства для работы с ними.\r\n * @namespace WebAccess.extensions\r\n */\r\n this.extensions = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для генерирования динамических компонент. \r\n * Например, модальных окон или контекстных меню.\r\n * Не требует использования функции WebAccess.ready.\r\n * @namespace WebAccess.components\r\n * @since 5.0.0.4000 \r\n */\r\n this.components = this.CMP = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с веб-сервисами. \r\n * Не требует использования функции WebAccess.ready.\r\n * @namespace WebAccess.services\r\n * @alias SRV\r\n * @since 5.0.0.4000 \r\n */\r\n this.services = this.SRV = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с шаблонами. \r\n * Не требует использования функции WebAccess.ready.\r\n * @namespace WebAccess.templates\r\n * @alias TMPL\r\n * @since 5.0.0.4213\r\n */\r\n this.templates = this.TMPL = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с фабриками документов, папкок, задач, заданий, справочников, отчетов и сценариев.\r\n *\r\n * @namespace WebAccess.factories\r\n * @alias TMPL\r\n * @since 5.0.0.7300\r\n */\r\n this.factories = this.FC = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет вспомогательные объекты для расширения функциональности классов, например объекты для работы с реквизитами. \r\n * Не предназначен для создания самостоятельно используемых объектов. \r\n * Не требует использования WebAccess.ready.\r\n * @namespace WebAccess.mixins\r\n * @since 5.0.0.7100\r\n */\r\n this.mixins = {};\r\n\r\n\r\n /**\r\n * Предоставляет инструменты для работы с кэшем. Не требует использования функции WebAccess.ready.\r\n * @namespace WebAccess.cache\r\n * @since 5.0.0.7100\r\n */\r\n this.cache = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с прикладными функциями Is-Builder. Не требует использования функции WebAccess.ready.\r\n * @namespace WebAccess.isbuilder\r\n * @since 5.5.0.5500\r\n */\r\n this.isbuilder = this.ISB = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с историей. \r\n * Генерирует события изменения стека истории. \r\n * \r\n * @namespace WebAccess.history\r\n */\r\n this.history = {};\r\n\r\n /**\r\n * Предоставляет доступ к прикладным методам объектов.\r\n * @namespace WebAccess.domainMethods\r\n * @since 5.5.0.1000\r\n */\r\n this.domainMethods = {};\r\n\r\n /**\r\n * Предоставляет доступ к прикладным действиям.\r\n * @namespace WebAccess.actions\r\n * @since 5.6.0.1000\r\n */\r\n this.actions = {};\r\n\r\n /**\r\n * Предоставляет информацию о текущем окружении. Например, о версии браузера, об операционной системе, о устройстве.\r\n * @namespace WebAccess.environment\r\n * @property {string} ua Строка User-agent\r\n * @alias ENV\r\n * @since 5.0.0.4200\r\n *\r\n * @example \r\n * if (WA.ENV.browser.name == \"Firefox\") { alert(\"Текущи браузер Firefox\"); } \r\n */\r\n\r\n this.environment = this.ENV = window.environmentInfo;\r\n\r\n /**\r\n * Содержит информацию об имени и версии текущего браузера.\r\n *\r\n * @namespace WebAccess.environment.browser \r\n * @property {string} name Имя браузера. например, «Firefox»\r\n * @property {string} major Основная версия текущего браузера, например, «23»\r\n * @property {string} version Полная версия, например, «23.0»\r\n *\r\n * @example \r\n * if (WA.ENV.browser.name == \"Firefox\") { alert(\"Текущи браузер Firefox\"); } \r\n */\r\n\r\n /**\r\n * Содержит информацию об архитектуре используемого процессора.\r\n *\r\n * @namespace WebAccess.environment.cpu\r\n * @property {string} architecture Сборка браузера, например, «amd64»\r\n */\r\n\r\n /**\r\n * Содержит информацию об используемом мобильном устройстве.\r\n *\r\n * @namespace WebAccess.environment.device\r\n * @property {string} model Модель устройства\r\n * @property {string} vendor Поставщик\r\n * @property {string} type Тип устройства\r\n */\r\n\r\n /**\r\n * Содержит информацию о движке браузера. \r\n *\r\n * @namespace WebAccess.environment.engine\r\n * @property {string} name Имя движка, например, «Gecko» \r\n * @property {string} version Полная версия, например, «23.0»\r\n */\r\n\r\n /**\r\n * Содержит информацию об используемой операционной системе.\r\n * @namespace WebAccess.environment.os\r\n * @property {string} name Имя операционной системы, например «Windows» \r\n * @property {string} version Версия, например «8»\r\n */\r\n\r\n this.environment.isMobile = function () {\r\n var agent = navigator.userAgent.toLowerCase();\r\n var oldMobileBrowser = (agent.indexOf(\"series60\") != -1) || (agent.indexOf(\"symbian\") != -1) || (agent.indexOf(\"windows ce\") != -1) || (agent.indexOf(\"blackberry\") != -1);\r\n var modernMobile = typeof orientation != 'undefined' ? true : false;\r\n return oldMobileBrowser || modernMobile;\r\n };\r\n\r\n this.environment.isAndroid = function () {\r\n return self.environment.os.name === \"Android\";\r\n }\r\n\r\n this.environment.isIOS = function () {\r\n return self.environment.os.name === \"iOS\";\r\n }\r\n\r\n this.environment.isTouch = function () {\r\n var agent = navigator.userAgent.toLowerCase(); //todo: закешировать уже\r\n // If touch events are defined we are in a modern touch screen OS \r\n return ('ontouchstart' in document.documentElement) ? true : false || agent.indexOf(\"touch\") !== -1 || agent.indexOf(\"tablet\") !== -1;\r\n };\r\n\r\n /**\r\n * Ориентация экрана.\r\n */\r\n this.environment.isVertical = function () {\r\n if (($(window).height() / $(window).width()) > 1) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Платформа.\r\n * \r\n * @deprecated \r\n */\r\n this.environment.platform = \"unknown\"\r\n if (navigator.appVersion.indexOf(\"Win\") != -1) this.environment.platform = \"windows\";\r\n if (navigator.appVersion.indexOf(\"Mac\") != -1) this.environment.platform = \"macos\";\r\n if (navigator.appVersion.indexOf(\"Linux\") != -1 || navigator.appVersion.indexOf(\"X11\") != -1) this.environment.platform = \"linux\";\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred-объект. Сообщает о готовности к использованию клиентской объектной модели после ее полной инициализации.\r\n *\r\n * @member WebAccess.Init\r\n */\r\n this.Init = $.Deferred();\r\n\r\n /**\r\n * deferred-объект. Сообщает о готовности к использованию пространства имен WebAccess.current.sideBar после его полной инициализации.\r\n * При использовании WebAcces.ready функция будет исполнена несколько позже, \r\n * так как функция WeabAcces.ready дожидается полной инициализации всех deferred-объектов и только потом исполняет переданную ей функцию.\r\n *\r\n * @member WebAccess.SideBarInit\r\n *\r\n * @example\r\n * $.when(WebAccess.SideBarInit).done(function () {\r\n *  WebAccess.current.sideBar.tabs.create(\"FilterRRC\").enable().setLabel(L(\"RRC_FILTER\")).setIcon(\"SidebarAndExtensions/EDocumentSearch_24.png\").setHtml(createFilterTabs(\"РКК\"));\r\n *  WebAccess.current.sideBar.tabs.create(\"FilterRRCAssignment\").enable().setLabel(L(\"RRC_ASSIGNMENTS_FILTER\")).setIcon(\"SidebarAndExtensions/EDocumentSearch_24.png\").setHtml(createFilterTabs(\"RRCAssignments\"));\r\n * });\r\n */\r\n this.SideBarInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccesst.agent после его полной инициализации.\r\n * @since 5.1.0.1500\r\n * @member WebAccess.AgentInit \r\n */\r\n this.AgentInit = $.Deferred();\r\n \r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.toolBar после его полной инициализации.\r\n * @member WebAccess.ToolBarInit\r\n */\r\n this.ToolBarInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.form.controls после его полной инициализации.\r\n * @member WebAccess.FormControlsInit\r\n */\r\n this.FormControlsInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.details после его полной инициализации.\r\n * @member WebAccess.DetailsInit\r\n */\r\n this.DetailsInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.objectList после его полной инициализации.\r\n * @member WebAccess.ObjectListInit\r\n */\r\n this.ObjectListInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n this._DetailsGridInit = $.Deferred();\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.user после после его полной инициализации\r\n * @since 5.0.0.7200\r\n * @member WebAccess.UserInfoInit\r\n */\r\n this.UserInfoInit = $.Deferred();\r\n this._userInfoInit = $.Deferred();\r\n\r\n \r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с анимацией, отображающей процесс загрузки.\r\n *\r\n * @namespace WebAccess.current.spinner \r\n * @since 5.0.0.7300 \r\n */\r\n\r\n /**\r\n * Отложенный запуск анимации процесса загрузки.\r\n *\r\n * @method WebAccess.current.spinner.showDelayed\r\n * @param {Integer} [opt_delay] Задержка запуска анимации в миллисекундах\r\n * @return {WebAccess.current.spinner} Объект типа spinner.\r\n * @since 5.0.0.7300\r\n */\r\n\r\n /**\r\n * Показать анимацию процесса загрузки.\r\n *\r\n * @method WebAccess.current.spinner.show\r\n * @return {WebAccess.current.spinner} Объект типа spinner.\r\n * @since 5.0.0.7300\r\n */\r\n\r\n /**\r\n * Показать анимацию процесса загрузки в диалоговом окне.\r\n *\r\n * @method WebAccess.current.spinner.showInDialog\r\n * @param {Integer} [opt_delay] Задержка запуска анимации в миллисекундах\r\n * @return {WebAccess.current.spinner} Объект типа spinner.\r\n * @since 5.0.0.7300\r\n */\r\n\r\n /**\r\n * Скрыть анимацию процесса загрузки.\r\n *\r\n * @method WebAccess.current.spinner.hide\r\n * @param {String} [opt_message] Cообщение о завершении процесса загрузки.\r\n * @param {Integer} [opt_delay] Задержка запуска анимации в миллисекундах\r\n * @param {Integer} [opt_callback] Функция, которая будет запущена после скрытия анимации.\r\n * @return {WebAccess.current.spinner} Объект типа spinner.\r\n * @since 5.0.0.7300\r\n */\r\n\r\n\r\n\r\n /**\r\n * Предоставляет инструменты для работы с диалоговыми сообщениями.\r\n *\r\n * @since 5.0.0.7300\r\n * @namespace WebAccess.current.inlineHint\r\n */\r\n\r\n /**\r\n * Показать диалоговое окно с предупреждением.\r\n *\r\n * @function WebAccess.current.inlineHint.showWarning\r\n * @param {String} message Основной текст предупреждения\r\n * @param {String} [opt_details] Информационный текст, объясняющий суть предупреждения\r\n * @return {WebAccess.current.inlineHint} Объект типа inlineHint.\r\n * @since 5.0.0.7300\r\n */\r\n\r\n /**\r\n * Показать диалоговое окно с текстом ошибки.\r\n *\r\n * @function WebAccess.current.inlineHint.showError\r\n * @param {String} message Основной текст ошибки\r\n * @param {String} [opt_details] Информационный текст, объясняющий ошибку\r\n * @return {WebAccess.current.inlineHint} Объект типа inlineHint.\r\n */\r\n\r\n /**\r\n * Показать диалоговое окно с информацией.\r\n *\r\n * @function WebAccess.current.inlineHint.showInfo\r\n * @param {String} message Основной текст сообщения\r\n * @param {String} [opt_details] Информационный текст, объясняющий суть сообщения\r\n * @return {WebAccess.current.inlineHint} Объект типа inlineHint.\r\n * @since 5.1.0.1511\r\n */\r\n\r\n /**\r\n * Показать диалоговое окно сообщения.\r\n *\r\n * @function WebAccess.current.inlineHint.show\r\n * @param {String} message сОсновной текст сообщения\r\n * @param {String} [opt_details] Информационный текст\r\n * @param {MESSAGE_TYPE} [opt_messageType] Тип сообщения\r\n * @return {WebAccess.current.inlineHint} Объект типа inlineHint.\r\n */\r\n \r\n /**\r\n * Скрыть последнее открытое сообщение.\r\n *\r\n * @function WebAccess.current.inlineHint.hide \r\n * @return {WebAccess.current.inlineHint} Объект типа inlineHint.\r\n * @since 5.0.0.7300\r\n */\r\n \r\n /**\r\n * Скрыть все сообщения.\r\n *\r\n * @function WebAccess.current.inlineHint.hideAll\r\n * @static\r\n * @since 5.0.0.7300\r\n */\r\n\r\n $.when(this.FormControlsInit).done(function () {\r\n if (!$('html').hasClass('mobile') && !self.current.inlineHint) {\r\n self.current.spinner = new WA.CMP.notifications.Spinner();\r\n self.current.inlineHint = new WA.CMP.notifications.InlineHint();\r\n }\r\n });\r\n\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.extensions после его полной инициализации.\r\n * @member WebAccess.ExtensionsInit\r\n */\r\n this.ExtensionsInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию дерева объектов\r\n * @member WebAccess.ExtensionsInit\r\n * @since 5.2.0.1600\r\n * @comment документаторы, не акцентируйте на него много внимания, немотря на то, что он новый.\r\n */\r\n this.FolderTreeInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** @private */\r\n this._extensionsDataInit = $.Deferred();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * deferred объект. Сообщает о готовности к использованию пространства имен WebAccess.current.form после его полной инициализации.\r\n * @member WebAccess.FormInit\r\n * @since 5.0.0.7100\r\n */\r\n this.FormInit = $.Deferred();\r\n\r\n\r\n /**\r\n * Когда объект extensions заполняется данными, дополняем его еще и методами.\r\n */\r\n $.when(this._extensionsDataInit).done(function () {\r\n for (var extension in self.extensions) {\r\n var ext = new Extension(self.extensions[extension]);\r\n self.extensions[extension] = ext;\r\n /**\r\n * Ссылка на объект типа Extension, который хранит информацию о текущем веб-модуле.\r\n * @member WebAccess.extensions.current\r\n */\r\n if (ext.isCurrent) self.extensions.current = ext;\r\n }\r\n self.EXT = self.extensions;\r\n self.ExtensionsInit.resolve();\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Когда все элементы будут загружены, тогда вызовем все функции иницализации.\r\n * @fixme вызывать функции асинхронно\r\n */\r\n $.when(this.ToolBarInit,\r\n this.SideBarInit,\r\n this.FormControlsInit,\r\n this.DetailsInit,\r\n this.ExtensionsInit,\r\n this.ObjectListInit,\r\n this.FormInit,\r\n this.UserInfoInit).done(function () {\r\n self.Init.resolveWith(self);\r\n self._whenInitComplete.forEach(function (fn) {\r\n setTimeout(() => {\r\n fn.call(self);\r\n }, 0);\r\n });\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n $('html').bind(PAGE_EVENTS.TAB_ON_AFTER_RENDER_NEW_MODEL, function () {\r\n self._whenInitComplete.forEach(function (fn) {\r\n fn.call(self);\r\n });\r\n });\r\n\r\n this.Task = new TaskModel();\r\n this.Job = new JobModel();\r\n this.Document = new DocumentModel();\r\n this.ReferenceRecord = new ReferenceRecordModel();\r\n this.Folder = new FolderModel();\r\n this.Wizard = new WizardModel();\r\n // Добавил для отработки событий \"До запроса парраметров\" при выборе ТМа.\r\n this.Events = {};\r\n\r\n /**\r\n * @ignore\r\n * @function WebAccess.setEvents\r\n * @todo кому-нибудь описать что это.\r\n */\r\n this.setEvents = function (events) {\r\n $.each(events, function (key, value) {\r\n self.Events[key] = value;\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Генерировать исключение.\r\n * Если при срабатывании исключение не было отловлено конструкцией try/catch или функция\r\n * не была обернута в функцию tryCatchDecorator, то выполняемый сценарий остановится.\r\n *\r\n * @function WebAccess.raise\r\n * @param {string} error Код строки ошибки\r\n * @param {string} [value] Переданное значение, например имя объекта, вызвавшего ошибку\r\n *\r\n * @example\r\n * // Проверка существования закладки. Если закладка существует, то генерируется исключение.\r\n * if (jExistingTab.length > 0) WebAccess.raise(\"ERR_TAB_WITH_THE_SAME_NAME_ALREADY_EXIST\", name);\r\n */\r\n this.raise = function (error, value) {\r\n let message = L(error);\r\n\r\n if (value) {\r\n message += `: ${value}`;\r\n }\r\n\r\n const exception = new Error(message);\r\n \r\n if (window.log) {\r\n log.error('DEFAULT', `${message}\\n${exception.stack}`);\r\n }\r\n\r\n exception.name = error;\r\n\r\n // Выбрасываем исключение, чтобы остановить выполняемый сценарий.\r\n throw exception; \r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n\r\n /**\r\n * Автоматически отобрать исключения, которые могут произойти в функции. \r\n * Выводит информацию об исключении в стандартную область ошибок и уведомлений. \r\n * Не рекомендуется использовать в местах, где нужна производительность, особенно при работе в циклах.\r\n *\r\n * @function WebAccess.tryCatchDecorator\r\n * @param {function} decoratedFunction декорируемая функция\r\n * @since 5.0.0.4000 \r\n * @alias TCD\r\n *\r\n * @example\r\n * function ShowCustomizationWindow(el) {\r\n * ...\r\n *\t // Произошло исключение.\r\n * ...\r\n * };\r\n * ShowCustomizationWindow = WebAccess.tryCatchDecorator(ShowCustomizationWindow);\r\n * // В результате выполнения функции, исключение будет обработано, и не остановит дальнейшее выполнение сценария.\r\n */\r\n this.tryCatchDecorator = this.TCD = function (decoratedFunction) {\r\n return function () {\r\n try {\r\n return decoratedFunction.apply(this, arguments);\r\n } catch (err) {\r\n if (window.log) log.error('DEFAULT', err);\r\n if (window.console) console.log(err);\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n let message = `${L('JS_ERROR')} : ${err.message}`;\r\n WA.CR.inlineHint.showError(message, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n return null;\r\n }\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Закешированное текущее местоположение.\r\n * @private\r\n * @property WebAccess._location\r\n */\r\n this._location = '';\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Определить текущее местоположение.\r\n *\r\n * @function WebAccess.getLocation\r\n * @return {string} Текущее местонахождение, например explorer, task, job, reference, wizard, about.\r\n * @example \r\n * if (WA.getLocation === 'explorer') {\r\n * console.log('В данный момент мы находимся в проводнике веб-доступа');\r\n * };\r\n */\r\n this.getLocation = () => {\r\n if (!this._location) {\r\n if (!window.location) return '';\r\n const path = window.location.pathname;\r\n this._location = path.substr(1, path.lastIndexOf('.') - 1).toLowerCase();\r\n }\r\n return this._location;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показывает, что мобильный веб-доступ открыт.\r\n *\r\n * @function WebAccess.isMobile\r\n * @return {boolean} True – мобильный веб-доступ открыт, иначе False.\r\n * @since 5.1.0.1505\r\n */\r\n this.isMobile = function () {\r\n return ($(\"html.mobile\").length > 0);\r\n };\r\n\r\n /**\r\n * Выйти из проводника веб-доступа.\r\n *\r\n * @function WebAccess.logout\r\n * @return {WebAccess} Объет типа WebAccess. \r\n * @since 5.0.0.7300\r\n */\r\n this.logout = () => {\r\n $.cookie('lang', null);\r\n\r\n if (!this.isMobile()) {\r\n if (WA.agent.isSessionInitialized()) {\r\n //FIXME: always переделать на done и fail\r\n WA.agent.isPluginAvailable('edmsplugin')\r\n .always((isAvailableResponse) => {\r\n //Сообщаем агенту о выходе\r\n if (isAvailableResponse) {\r\n WA.agent.endSession();\r\n }\r\n });\r\n } \r\n }\r\n\r\n //Закрываем сессию\r\n CallService('/Authentication.asmx/Logout', {}, () => window.location = 'Login.aspx');\r\n return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n window.WebAccess = window.WA = new WebAccess();\r\n})();\r\n\r\n","\"use strict\";\r\n(function pluginMixin(global) {\r\n\r\n /**\r\n * Предоставляет дополнительные методы для для расширения функциональности классов.\r\n *\r\n * @mixin WebAccess.mixins.pluginMixin\r\n * @since 5.2.0.1100\r\n */\r\n global.pluginMixin = { \r\n _plugins: [],\r\n\r\n /**\r\n * Преобработка параметров конструктора. Если в него был передан\r\n * объект со списком плагинов, то зарегистрируем их сразу же.\r\n * @method WebAccess.mixins.pluginMixin#_parseArguments\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _parseArguments: function () { \r\n var me = this;\r\n me._plugins = [];\r\n for (var arg = 0; arg < arguments.length; ++arg) {\r\n var param = arguments[arg];\r\n if ($.isPlainObject(param) && param.hasOwnProperty('plugins')) {\r\n var plugins = param.plugins;\r\n\r\n for (var i = 0; i < plugins.length; i++) {\r\n var plugin = plugins[i];\r\n\r\n if (plugin && plugin.__isPlugin === true) {\r\n me.registerPlugin(plugin);\r\n } \r\n }\r\n };\r\n } \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин. \r\n *\r\n * Вызывается неявно, если в коструктор класса был передан список плагинов.\r\n * Можно вызвать вручную.\r\n * @param {WA.Plugin} plugin Плагин\r\n * @method WebAccess.mixins.pluginMixin#registerPlugin\r\n * @return {WebAccess.mixins.link}\r\n * @since 5.2.0.1100\r\n */\r\n registerPlugin: function (plugin) {\r\n var me = this;\r\n if (plugin.register && plugin.name) {\r\n var methods = plugin.register(me);\r\n\r\n for (var methodName in methods) {\r\n if (this.hasOwnProperty(methodName)) {\r\n log.warning('PLUGIN', '\"'+plugin.name + '\" overrides extiting method \"'+ methodName + '\"');\r\n }\r\n this[methodName] = methods[methodName];\r\n }\r\n\r\n this._plugins.push(plugin.name);\r\n log.info('PLUGIN', '\"' + plugin.name + '\" registered');\r\n } else {\r\n WA.raise(L('PASSED_OBJECT_IS_NOT_PLUGIN_CLASS_ISTANCE'));\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет наличие зарегистрированного плагина в классе. \r\n * @param {string} pluginName Имя плагина\r\n * @method WebAccess.mixins.pluginMixin#isPluginRegistered\r\n * @return {boolean}\r\n * @since 5.2.0.1100\r\n */\r\n isPluginRegistered: function(pluginName) {\r\n return this._plugins.indexOf(pluginName) !== -1;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n})(window.WebAccess.mixins);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n var selectors = {\r\n details: '.Reference_Detail',\r\n links: 'a',\r\n buttons: '.CardForm_Button, .wizard-form__button',\r\n tabs: '.sidebar_item, .tab_item',\r\n searches: '.explorer-search-panel__item',\r\n toolBarButtons: '.toolbar_button',\r\n toolBarGroups: '.toolbar_group'\r\n };\r\n\r\n /**\r\n * Предоставляет механизм инициализации дочерних пространств имен для оберток\r\n * элементов формы.\r\n *\r\n * @mixin WebAccess.mixins.formMixin\r\n * @since 5.2.0.1600\r\n * @property {WebAccess.components.wrappers.form.Form} form - форма\r\n * @property {WebAccess.components.wrappers.details.Detail} details - детальные разделы\r\n * @property {WebAccess.components.wrappers.details.sideBar.SideBar} sideBar - форма\r\n * @property {BaseObject} toolBar - панель инструментов\r\n * @property {window} toolBar - панель инструментов //TODO\r\n * @property {Object} states - deferred объекты инициализации оберток\r\n */\r\n\r\n var formMixin = {\r\n Init: null,\r\n form: null,\r\n details: null,\r\n sideBar: null,\r\n toolBar: null,\r\n window: null,\r\n objectList: null,\r\n states: null,\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Установка начальных значений deferred объектов;\r\n * @method _preInit\r\n * @private\r\n * @return {WebAccess.mixins.formMixin} расширяемый класс\r\n */\r\n _preInit: function () {\r\n var me = this;\r\n me.states = {\r\n objectList: $.Deferred(),\r\n details: $.Deferred(),\r\n toolBarButtons: $.Deferred(),\r\n toolBarGroups: $.Deferred(),\r\n tabs: $.Deferred(),\r\n tables: $.Deferred(),\r\n links: $.Deferred(),\r\n buttons: $.Deferred(),\r\n form: $.Deferred()\r\n };\r\n\r\n // Блок подписки на события должен находиться в mixin, чтобы одинаково\r\n // работать как для диалогов, так и для окна веб-доступа. Если перенести этот\r\n // блок в current.js, он будет работать только для WA.CR\r\n $('html').one(PAGE_EVENTS.TOOLBAR_BUTTONS_INIT_DONE, () => {\r\n this.states.toolBarButtons.resolve();\r\n }).one(PAGE_EVENTS.TOOLBAR_GROUPS_INIT_DONE, () => {\r\n this.states.toolBarGroups.resolve();\r\n });\r\n\r\n me.Init = $.Deferred();\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Заполенение и инициализация дочерних пространств имен\r\n * @method _postInit\r\n * @private\r\n * @return {WebAccess.mixins.formMixin} расширяемый класс\r\n */\r\n _postInit: function () {\r\n var me = this;\r\n var WR = global.CMP.wrappers;\r\n\r\n me._containerInit.done(function () {\r\n me._jContainer = $(me.containerSelector);\r\n\r\n me.details = me._getSubItems(selectors.details, WR.details.Detail);\r\n me.states.details.resolve();\r\n\r\n me.form = new WR.form.Form(me._getFormData(), me.serviceURL, me);\r\n me.form.controls = new BaseObject();\r\n me.form.Init.then(function () {\r\n me.states.form.resolve();\r\n });\r\n\r\n if ($.isFunction(me._initObjectList)) {\r\n me._initObjectList();\r\n } else {\r\n console.warn('It is necessary to implement _initObjectList method in ' + me.className + '.');\r\n }\r\n me.states.objectList.resolve();\r\n\r\n me.form.controls.links = new global.Collection(me._getSubItems(selectors.links, WR.form.Link));\r\n me.states.links.resolve();\r\n me.form.controls.buttons = new global.Collection(me._getSubItems(selectors.buttons, WR.form.Button));\r\n me.states.buttons.resolve();\r\n\r\n if (!WA.isMobile()) {\r\n if (me.className === 'Current' && WA.getLocation() === 'explorer') { //спецобработка\r\n me.sideBar = new WR.sideBar._ExplorerSideBar(me.containerSelector + ' ' + me._sideBarContainerSelector, me);\r\n me.sideBar.tabs = new WR.sideBar._ExplorerTabs(me._getSubItems(selectors.searches, WR.sideBar._ExplorerTab), me.containerSelector + ' ' + me._sideBarContainerSelector, me);\r\n } else {\r\n me.sideBar = new WR.sideBar.SideBar(me.containerSelector + ' ' + me._sideBarContainerSelector, me);\r\n me.sideBar.tabs = new WR.sideBar.Tabs(me._getSubItems(selectors.tabs, WR.sideBar.Tab), me.containerSelector + ' ' + me._sideBarContainerSelector, me);\r\n }\r\n }\r\n\r\n me.states.tabs.resolve();\r\n \r\n // В диалогах отсутствует тулбар, поэтому сгенерируем события его инициализации\r\n if (me.className === 'FormDialog') {\r\n $('html').trigger(PAGE_EVENTS.TOOLBAR_BUTTONS_INIT_DONE);\r\n $('html').trigger(PAGE_EVENTS.TOOLBAR_GROUPS_INIT_DONE);\r\n } else if (!window.g_hasReactToolbar) {\r\n // Получить список кнопок\r\n var buttons = new WR.toolBar.Buttons(me._getSubItems(selectors.toolBarButtons, WR.toolBar.ToolBarButton));\r\n me.toolBar = new BaseObject();\r\n if (!WA.isMobile()) {\r\n me.toolBar = new WR.toolBar.ToolBar();\r\n me.toolBar.buttons = buttons;\r\n $('html').trigger(PAGE_EVENTS.TOOLBAR_BUTTONS_INIT_DONE);\r\n me.toolBar.groups = new WR.toolBar.Groups(me._getSubItems(selectors.toolBarGroups, WR.toolBar.ToolBarGroup));\r\n }\r\n\r\n $('html').trigger(PAGE_EVENTS.TOOLBAR_GROUPS_INIT_DONE);\r\n } else {\r\n // TODO переделать ресайз панели вкладок, чтобы она не зависела от тулбара.\r\n // Вызываем ресайз панели закладок, чтобы она подстроилась под размер окна при первом открытии.\r\n me.sideBar.resizeHorizontalTabs()\r\n } \r\n });\r\n\r\n\r\n me._detailsGridInit.done(function () {\r\n var tableParams = {\r\n formData: me._getFormData(),\r\n grids: me._getGrids(),\r\n objectLink: me._getObjectLink(),\r\n objectView: me._getObjectView(),\r\n serviceURL: me.serviceURL,\r\n current: me\r\n };\r\n\r\n var tables = me._getSubItems(selectors.details, global.CMP.wrappers.form.Table, tableParams);\r\n var tablesInit = [];\r\n for (var key in tables) {\r\n var table = tables[key];\r\n tablesInit.push(table.Init);\r\n }\r\n $.when.apply(me, tablesInit).then(function () {\r\n me.form.controls.tables = tables;\r\n me.states.tables.resolve();\r\n });\r\n });\r\n\r\n var states = _(me.states).values();\r\n $.when.apply(me, states).always(function () {\r\n me.Init.resolve();\r\n if (!WA.isMobile()) {\r\n me._jContainer.find('input[type=\"text\"], textarea').not('.Req_Disabled').first().focus().select(); //#106799\r\n }\r\n });\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Заполнение дочернего пространства соответсвующими элементами\r\n *\r\n * @param {string} elementSelector селектор искомого элемента\r\n * @param {Class} ComponentClass класс обертки для элемента\r\n * @param {Object} [params = this] параметры передаваемые в конструктор элемента обертки\r\n * @private\r\n * @return {Array} список объектов-оберток\r\n */\r\n _getSubItems: function (elementSelector, ComponentClass, params = {current: this}) {\r\n const items = {};\r\n\r\n const jSearchTarget = this._jContainer.find(elementSelector);\r\n jSearchTarget.each((index, domElement) => {\r\n const elem = new ComponentClass(domElement, params);\r\n const item = items[elem.name] = items[elem.name] || Object.assign(elem, {\r\n _jSubElements: [],\r\n });\r\n item._jSubElements.push(domElement);\r\n });\r\n\r\n return items;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Навешивает на все реквизиты строки таблицы логику работы ведущих/ведомых.\r\n * @method _bindLeaderDrivenLoginOnRequisites\r\n * @private\r\n * @param {WebAccess.components.wrappers.form.Table} table Таблица, на которую навешивается логика ведущих/ведомых.\r\n * @param {WebAccess.components.wrappers.form.TableRow} row Строка, на которую навешивается логика ведущих/ведомых.\r\n */\r\n _bindLeaderDrivenLoginOnRequisites: function (table, row) {\r\n var me = this;\r\n var reqs = row.requisites.toArray();\r\n for (var j = 0; j < reqs.length; j++) {\r\n var req = reqs[j];\r\n var currentColumnMetadata = table.getColumnMetadata(req.name);\r\n\r\n if (currentColumnMetadata) {\r\n var reqInfo = currentColumnMetadata.Requisite;\r\n if (reqInfo) {\r\n if (reqInfo.leaderRequisites && reqInfo.lookUpLeaderRequisites && reqInfo.drivenRequisites) {\r\n\r\n var leader = _($.parseJSON(reqInfo.leaderRequisites)).map(function (leadReq) {\r\n return { tableName: table.name, rowId: row.getRowId(), reqName: leadReq };\r\n });\r\n\r\n var lookup = $.parseJSON(reqInfo.lookUpLeaderRequisites);\r\n var driven = _($.parseJSON(reqInfo.drivenRequisites)).map(function (drivenReq) {\r\n return { tableName: table.name, rowId: row.getRowId(), reqName: drivenReq };\r\n });\r\n\r\n me._initLeaderDrivenLogic(req, leader, lookup, driven);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Навешивает на все реквизиты таблицы логику работы ведущих/ведомых.\r\n * @method bindLeaderDrivenLogicToTable\r\n * @param {WebAccess.components.wrappers.form.Table} table Таблица, на которую навешивается логика ведущих/ведомых.\r\n */\r\n bindLeaderDrivenLogicToTable: function (table) {\r\n var me = this;\r\n // Для существующих строк.\r\n var rows = table.rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n (function (_table, _row) {\r\n me._bindLeaderDrivenLoginOnRequisites(_table, _row);\r\n })(table, rows[i]);\r\n }\r\n // Для новых строк.\r\n (function (_table) {\r\n _table.bind('addRow', function (newRow) { \r\n me._bindLeaderDrivenLoginOnRequisites(_table, newRow);\r\n });\r\n })(table);\r\n },\r\n\r\n /**\r\n * Навешивает на все реквизиты таблицы всех детальных разделов логику работы ведущих/ведомых.\r\n * @method bindLeaderDrivenLogic\r\n */\r\n bindLeaderDrivenLogic: function () {\r\n var me = this;\r\n\r\n $.when(me.states.tables).then(function () {\r\n for (var tableName in me.form.controls.tables) {\r\n var table = me.form.controls.tables[tableName];\r\n (function (_table) {\r\n me.bindLeaderDrivenLogicToTable(_table);\r\n })(table);\r\n };\r\n });\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Инициализация логики ведущих/ведомых для реквизита.\r\n * @method _initLeaderDrivenLogic\r\n * @private\r\n * @param {WebAccess.components.wrappers.form.Table} req Реквизит, на которую навешивается логика ведущих/ведомых.\r\n * @param {array} leader Ведущие реквизиты.\r\n * @param {array} lookup lookup-реквизиты.\r\n * @param {array} driven Ведомые реквизиты.\r\n * @return {WA.formMixin} Текущий миксин.\r\n */\r\n _initLeaderDrivenLogic: function (req, leader, lookup, driven) {\r\n var me = this;\r\n\r\n if (!req || (leader.length === 0 && driven.length === 0)) return me;\r\n\r\n req.bind('editModeChange', function (editMode) {\r\n // Только в режиме редактирования можно означить фильтр по значениям ведущих.\r\n if (!editMode) return;\r\n\r\n _(req._getControls()).each(function (jInput) {\r\n var rs = jInput.data('ReferenceSelectInstance');\r\n if (rs && rs.extraParams) {\r\n var extraParams = rs.extraParams;\r\n // Устанавливаем условие фильтрации и необходимость загрузки lookup-реквизитов по ведущим реквизитам.\r\n $.extend(extraParams, {\r\n LeadSelID: function () {\r\n return me._getLookupValues(leader, lookup);\r\n }\r\n });\r\n rs.extraParams = extraParams;\r\n }\r\n });\r\n });\r\n\r\n req.bind('changeWithLeaderValues', function (jControl, ev, data, needClearDriven) {\r\n //data = { name: ..., value: ..., displayValue: ..., leaderRequisiteValues: ... }\r\n\r\n if (data && data.value !== null) {\r\n // Надо бы заполнить ведущиеи очистить ведомые.\r\n\r\n // Очищаем ведомые.\r\n if (needClearDriven) {\r\n me._clearRequisitesValue(driven);\r\n }\r\n // Заполняем ведущие.\r\n fillLeaderRequisites(data);\r\n\r\n // Заполняем ведомые, если в них одно значение (См. FillDrivenIfItResultHasOneRecord).\r\n //В билдере эта логика не срабатывает, поэтому и у нас не сделал.\r\n\r\n } else {\r\n // Очищаем ведомые.\r\n me._clearRequisitesValue(driven);\r\n }\r\n\r\n //Заполняет ведущие реквизиты\r\n function fillLeaderRequisites(data) {\r\n for (var i = 0; i < leader.length; i++) {\r\n var leadValues = data.leaderRequisiteValues[lookup[i]];\r\n if (leadValues) {\r\n var leadReq = me._getRequisiteByFullName(leader[i]);\r\n if (leadReq) {\r\n\r\n //Устанавливаем значение для ведущего реквизита\r\n leadReq.setValue(leadValues[0], leadValues[2], true);\r\n\r\n //Пытаемся установить значение ведущих реквизитов для текущего ведущего\r\n me._fillLeaderForDetailSectionRequisite(leadReq, leadValues[0]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n });\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Возвращает значения ведущих реквизитов в формате URL, т.е. name1=value1&name2=value2...\r\n * \r\n * @param {Array} leader Массив из {tableName: ..., rowId: ..., reqName: ...}\r\n * @param {Array} lookup Массив имен ведущих реквизитов\r\n * @returns {} \r\n */\r\n _getLookupValues: function (leader, lookup) {\r\n var me = this;\r\n var val = '';\r\n for (var i = 0; i < leader.length; i++) {\r\n var leadReq = me._getRequisiteByFullName(leader[i]);\r\n if (!leadReq) continue;\r\n var leadReqVal = leadReq.getValue();\r\n val += lookup[i] + '|' + leadReq.name + '=' + (leadReqVal ? leadReqVal : '') + '&';\r\n };\r\n return val;\r\n },\r\n\r\n /**\r\n * Возвращает объект реквизита по его полному имени\r\n * \r\n * @param {object} fullName Моделька полного имени реквизита вида {tableName: ..., rowId: ..., reqName: ...}\r\n * @returns {object} Реквизит\r\n */\r\n _getRequisiteByFullName: function (fullName) {\r\n var me = this;\r\n if (_.isString(fullName)) {\r\n // Реквизит карточки.\r\n return me.form.requisites[fullName];\r\n } else {\r\n // Реквизит детального раздела.\r\n return me.form.controls.tables[fullName.tableName].getRowById(fullName.rowId).requisites[fullName.reqName];\r\n }\r\n },\r\n\r\n /**\r\n * Чистит значения реквизитов.\r\n * \r\n * @param {Array} reqFullNames массив моделек вида {tableName: ..., rowId: ..., reqName: ...}\r\n */\r\n _clearRequisitesValue: function (reqFullNames) {\r\n var me = this;\r\n for (var i = 0 ; i < reqFullNames.length; i++) {\r\n var drivenReq = me._getRequisiteByFullName(reqFullNames[i]);\r\n if (drivenReq) drivenReq.clear(true);\r\n }\r\n },\r\n\r\n /**\r\n * Заполняет ведущие реквизиты для текущего реквизита с заданным значением\r\n * \r\n * @param {object} requisite Реквизит, для которого буду заполнены ведущие\r\n * @param {int} value Значение реквизита, для которого буду заполнены ведущие\r\n */\r\n _fillLeaderForDetailSectionRequisite: function (requisite, value) {\r\n var me = this;\r\n var row = requisite.getRow();\r\n var table = row.getTable();\r\n var currentColumnMetadata = table.getColumnMetadata(requisite.name);\r\n\r\n if (currentColumnMetadata) {\r\n var reqInfo = currentColumnMetadata.Requisite;\r\n if (reqInfo) {\r\n\r\n var settings = $.parseJSON(reqInfo.settings);\r\n var params = getReferenceSelectParams(reqInfo, settings, value);\r\n\r\n ReferenceSelectDataProvider.sendQuery(settings.url, params, function (count, res) {\r\n var data = res[0];\r\n if (data && data.leadingRequisitesValue !== \"{}\") {\r\n requisite.fire('changeWithLeaderValues', null, null, { name: data.encodedTitle, value: data.id, displayValue: data.title, leaderRequisiteValues: $.parseJSON(data.leadingRequisitesValue) }, false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает параметры для запроса на выборку реквизита с конкретным ИД\r\n * \r\n * @param {object} reqInfo Метаинформация реквизита\r\n * @param {object} settings Метаинформация реквизита\r\n * @param {number} recordId ИД записи, которое попадет в условие выборки\r\n * @returns {object} Параметры запроса\r\n */\r\n function getReferenceSelectParams(reqInfo, settings, recordId) {\r\n var leader = null;\r\n var lookup = null;\r\n if (reqInfo.leaderRequisites && reqInfo.lookUpLeaderRequisites) {\r\n\r\n leader = _($.parseJSON(reqInfo.leaderRequisites)).map(function (leadReq) {\r\n return { tableName: table.name, rowId: row.getRowId(), reqName: leadReq };\r\n });\r\n\r\n lookup = $.parseJSON(reqInfo.lookUpLeaderRequisites);\r\n }\r\n\r\n var refCode = requisite.getReferences()[0];\r\n var queryContext = settings.queryContext;\r\n // Множественный выбор ссылается на несколько ревизитов, поэтому меняем контекст.\r\n if (settings.referenceCodesAndReqNamesInDetailSection && settings.referenceCodesAndReqNamesInDetailSection[refCode]) {\r\n queryContext = JSON.parse(queryContext);\r\n queryContext.requisiteNumber = settings.referenceCodesAndReqNamesInDetailSection[refCode].number;\r\n queryContext = JSON.stringify(queryContext);\r\n }\r\n\r\n return $.extend({\r\n q: \"\",\r\n filter: \"[ИД]=\" + recordId,\r\n useadditional: settings.useadditional ? \"1\" : \"0\",\r\n disablespecialprocessing: \"1\",\r\n queryContext: queryContext,\r\n LeadSelID: me._getLookupValues(leader, lookup)\r\n }, {});\r\n }\r\n }\r\n };\r\n\r\n global.mixins.formMixin = formMixin;\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n(function BasePluginDefinition(global) {\r\n\r\n /** \r\n * Базовый класс-плагин\r\n * @class WebAccess.Plugin \r\n * @property {String} name имя плагина\r\n * @property {String} className имя класса\r\n * @since 5.2.0.1100\r\n */\r\n global.Plugin = BaseObject.extend({\r\n __isPlugin: true,\r\n name: null, \r\n className: 'Plugin',\r\n \r\n init: function (params) {\r\n this._super(params); \r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Метод регистрации плагина, этот метод вызывается автоматически.\r\n * В него передается ссылка на расширяемый объект.\r\n * @param {object} context - расширяемый объект\r\n * @method WebAccess.Plugin.register\r\n * @since 5.2.0.1100\r\n * @return {object} свойства и методы которые будут доступны в расшияремом классе \r\n * @example\r\n * //Принцип работы с плагинами\r\n * var SomeClass = BaseObject.extend([WebAccess.mixins.pluginMixin],{\r\n * init: functtion() {\r\n * this._super();\r\n * }\r\n * });\r\n * ....\r\n * var SomePlugin = WebAccess.Plugin.extend({\r\n * name: 'somePlugin',\r\n * init: functtion() {\r\n * this._super();\r\n * },\r\n * register: function() {\r\n * return {\r\n * 'doSomething': this.doSomething_exported\r\n * }\r\n * }\r\n * doSomething_exported: function() {\r\n * return\r\n * }\r\n * }); \r\n * ...\r\n * var instance = new SomeClass(param1, param2, ..., paramN, {plugins: [new SomePlugin()] });\r\n */\r\n register: function (context) {\r\n this.bind('classInit', this.afterClassInit);\r\n return {}\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Метод, который будет вызван после инициализации расширяемого объекта. \r\n * @param {object} context - расширяемый объект\r\n * @method WebAccess.Plugin.afterMainClassInit\r\n * @since 5.2.0.1100\r\n * @return {object} свойства и методы которые будут доступны в расшияремом классе\r\n */\r\n afterMainClassInit: function(context) {\r\n return;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n });\r\n\r\n})(window.WebAccess);","/* Заглушка для старых браузеров */\r\nif (typeof window.console == \"undefined\") {\r\n window.console = { log: function () { }, debug: function () { } };\r\n} else if (WA.ENV.browser.name == \"IE\" && WA.ENV.browser.major < 11) {\r\n linktoOldconsole = window.console;\r\n window.console = {\r\n log: function (message) {\r\n //linktoOldconsole.log(typeof message)\r\n\r\n if (typeof message == \"string\") {\r\n linktoOldconsole.log(message);\r\n return;\r\n };\r\n\r\n if (typeof message == \"function\") {\r\n linktoOldconsole.log(message.toString());\r\n return;\r\n };\r\n\r\n if (message && typeof message == \"object\" && typeof message['selector'] !== 'undefined') {\r\n linktoOldconsole.log(\"Jquery object: \" + message.selector);\r\n return;\r\n };\r\n\r\n function dir(object) {\r\n for (s in object) {\r\n linktoOldconsole.log(s + \": \" + object[s].toString().trunc(100).split(\"\\n\")[0]);\r\n }\r\n }\r\n try {\r\n linktoOldconsole.log(dir(message));\r\n } catch (E) {\r\n linktoOldconsole.log(message);\r\n }\r\n },\r\n debug: function () { },\r\n warn: function (message) {\r\n this.log(message);\r\n }\r\n };\r\n}\r\n\r\n/* =Main============================================================================================================================================== */\r\nfunction GetWSSParam(Url, IsFirstParam) {\r\n if (Url.toLowerCase().indexOf(\"wss=1\") != -1) {\r\n return (IsFirstParam ? \"?\" : \"&\") + \"wss=1\";\r\n }\r\n return \"\";\r\n}\r\n// Проверяем жива ли сессия по возвращаемой странице.\r\nfunction CheckForLoginPage(res) {\r\n // Если время жизни сессии пользователя завершилось - обновим страницу, чтобы перенаправить пользователя на страницу входа в систему\r\n if (res != null && (('' + res).indexOf(\"LoginTextBox\") != -1 || (typeof res == \"object\" && res.Error && res.Error == \"sLogin\"))) {\r\n WA.services._isSessionAlive(475);\r\n //location.href = '';\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/** \r\n * @deprecated since 5.7.0. Use WA.URL.getParam instead.\r\n */\r\nfunction GetParamInURL(name, url) {\r\n //log.warn('DEPRECATED', \"Function GetParamInURL is obsolete. Use class WebAccess.URL instead\");\r\n return (new WA.URL(url)).getParam(name);\r\n}\r\n\r\n/** \r\n * @deprecated since 5.7.0. Use WA.URL.setParam instead.\r\n */\r\nfunction ChangeParamInURL(url, param, value) {\r\n //log.warn('DEPRECATED', \"Function ChangeParamInURL is obsolete. Use class WebAccess.URL instead\");\r\n return (new WA.URL(url)).setParam(param, value).asString();\r\n}\r\n\r\n/** \r\n * @deprecated since 5.7.0. Use WA.URL.removeParam instead.\r\n */\r\nfunction RemoveParamInURL(url, param) {\r\n //log.warn('DEPRECATED', \"Function RemoveParamInURL is obsolete. Use class WebAccess.URL instead\");\r\n return (new WA.URL(url)).removeParam(param).asString();\r\n}\r\n\r\nfunction PrepareUrl(url, ParamStr) {\r\n var Params = ParamStr.split('&');\r\n var newUrl = url;\r\n for (var i = 0; i < Params.length; i++) {\r\n if (Params[i] != '') {\r\n if (Params[i].charAt(0) == '-') {\r\n newUrl = RemoveParamInURL(newUrl, Params[i].substr(1));\r\n } else {\r\n var p = Params[i].split('=');\r\n newUrl = ChangeParamInURL(newUrl, p[0], p[1]);\r\n }\r\n }\r\n }\r\n return newUrl;\r\n}\r\n\r\nfunction DoAction(paramStr, needSubmitForm, newFormAction, inHash) {\r\n setTimeout(() => {\r\n try {\r\n let params = paramStr.split('&');\r\n\r\n if (needSubmitForm) {\r\n for (let param of params) {\r\n if (!param) {\r\n continue;\r\n }\r\n\r\n if (param.startsWith('-')) {\r\n $('#' + param.substr(1)).val('');\r\n } else {\r\n let paramSplit = param.split('=');\r\n $('#' + paramSplit[0]).val(paramSplit[1]);\r\n }\r\n }\r\n const f = $('form:first');\r\n if (newFormAction) {\r\n f.attr('action', newFormAction);\r\n }\r\n f.submit();\r\n } else {\r\n let url = window.location.href;\r\n if (inHash) {\r\n url = (new WA.URL(url)).getHash();\r\n }\r\n url = PrepareUrl(url, paramStr);\r\n\r\n const ActTab = $('#ActiveTab');\r\n if (ActTab.length) {\r\n url = (new WA.URL(url)).setParam('ActiveTab', ActTab.val()).asString();\r\n }\r\n\r\n // запомним текущую вкладку в формате #TabN, где N -- номер вкладки\r\n // используется в ТКЭД Договорных документов\r\n const hashTabMatch = url.match(/#Tab\\d/);\r\n let hashTab = hashTabMatch ? hashTabMatch[0] : '';\r\n\r\n if (inHash) {\r\n url = `${(new WA.URL(url)).asStringWithoutHash()}#${url}`;\r\n } else if (!paramStr.includes('#')) {\r\n url = (new WA.URL(url)).asStringWithoutHash();\r\n }\r\n\r\n url += hashTab;\r\n window.location.href = url;\r\n }\r\n } catch (ex) {\r\n }\r\n }, 0);\r\n}\r\n\r\nfunction GetURLHash(url) {\r\n log.warn('DEPRECATED', \"Function GetURLHash is obsolete. Use class WebAccess.URL instead\");\r\n return (new WA.URL(url)).getHash();\r\n}\r\n\r\nfunction GetURLWithoutHash(url) {\r\n log.warn('DEPRECATED', \"Function GetURLWithoutHash is obsolete. Use class WebAccess.URL instead\");\r\n return (new WA.URL(url)).asStringWithoutHash();\r\n}\r\n\r\nfunction DoActionHash(ParamStr, callback) {\r\n DoAction(ParamStr, false, false, true);\r\n callback();\r\n}\r\n\r\nfunction ReloadExtension(ext) {\r\n log.warn('DEPRECATED', \"Function ReloadExtension is obsolete. Use class WebAccess.extensions.current.reload() instead\");\r\n ShowTopSpinner(L('MSG_RELOADING_EXTENSION'));\r\n CallService(\"/Administration.asmx/ReloadExtension\", { ExtensionName: ext }, function (res) {\r\n if (res.Success) {\r\n HideTopSpinner('', 0);\r\n ShowMessage(L('MSG_EXT_RELOADED'), L('SUCCESS'), function () { location.href = location.href; });\r\n } else {\r\n ShowError(res.Error);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Отображает подсказку типа Warning\r\n * \r\n * @method HintShow\r\n * @deprecated since 5.6. Use WA.CR.inlineHint.showWarning instead.\r\n */\r\nfunction HintShow(msg) {\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showWarning(msg, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n console.warn(format(this._deprecatedMethodMessageTemplate, 'HintShow'));\r\n}\r\n\r\n/**\r\n * Отображает подсказку типа Error\r\n * \r\n * @method WrnShow\r\n * @deprecated since 5.6. Use WA.CR.inlineHint.showError instead.\r\n */\r\nfunction WrnShow(msg) {\r\n\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showError(msg, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n console.warn(format(this._deprecatedMethodMessageTemplate, 'WrnShow'));\r\n}\r\n\r\nvar g_prevFormVal;\r\n\r\nfunction SerializeForm(containerSelector) {\r\n if (WA.isMobile() || !WA.CR.form.isExist()) {\r\n return __legacy_serializeForm(containerSelector);\r\n } else {\r\n return WA.CR.form.asString();\r\n }\r\n}\r\n\r\nfunction __legacy_serializeForm(containerSelector) {\r\n var jContainer;\r\n\r\n if (containerSelector) {\r\n jContainer = $(containerSelector);\r\n } else {\r\n jContainer = $('body');\r\n }\r\n\r\n var r = '';\r\n var cardForm = jContainer.find('.CardForm');\r\n if (cardForm.length == 0) {\r\n r = jContainer.find('input[type=text]:visible,input[type=checkbox]:visible,input[type=radio]:visible,select:visible,textarea:visible');\r\n } else {\r\n // На скрытых вкладках тоже ищем.\r\n r = cardForm.find('input[type=text],input[type=checkbox],input[type=radio],select,textarea');\r\n }\r\n //Добавляем скрытые поля и ИД реквизита \"Выбор из справочника\" для инпутов, которые видимы.\r\n var hidd = jContainer.find('input[id^=hSelID_]').filter(function () {\r\n var dispInp = $('#' + $(this).attr('name'));\r\n if (cardForm.length == 0) {\r\n dispInp = dispInp.filter(':visible');\r\n }\r\n return dispInp.length > 0;\r\n });\r\n r = r.serialize() + '&' + hidd.serialize();\r\n\r\n //Добавляем информацию о вложениях для ЗЗУ\r\n r += addAttachmentInfo();\r\n return r;\r\n}\r\n\r\nvar g_formContainerSelector;\r\nfunction BindBeforeUnload() {\r\n // С версии 5.6.0.1327 не испрользуется для ЗЗУ\r\n const containerSelector = g_formContainerSelector;\r\n let initDef;\r\n\r\n // В мобильной версии нет Form, поэтому этот механихм должен работать и отсылки на WA.Init.\r\n if (WA.isMobile()) {\r\n initDef = $.Deferred();\r\n initDef.resolve();\r\n } else {\r\n initDef = WA.Init;\r\n }\r\n\r\n initDef.done(() => {\r\n g_prevFormVal = SerializeForm(containerSelector);\r\n\r\n WA.CR.window.bind('beforeClose', () => {\r\n // Необходимо для отключения показа запроса при переходе с вкладки История\r\n // При дальнейших доработках нужно будет убирать\r\n let currentView = (new WA.URL()).getParam('view').toLowerCase();\r\n let needShowMessage = currentView !== 'history';\r\n\r\n if (needShowMessage && ((SerializeForm(containerSelector) != g_prevFormVal) || (g_RightsChanged == 1))) {\r\n return L('DATA_DIDNT_SAVE');\r\n }\r\n return false;\r\n });\r\n });\r\n}\r\nfunction UnbindBeforeUnload() {\r\n WA.CR.window.unbind('beforeClose');\r\n}\r\nfunction CloseWindow() {\r\n WA.CR.window.close();\r\n}\r\n\r\nfunction addAttachmentInfo() {\r\n //Добавляем информацию о вложениях для ЗЗУ\r\n var jAttachments = $('#main_container').find('.attachments_td');\r\n if (!jAttachments.find('#pnlEmpty')) {\r\n var AttachmentStr = [];\r\n jAttachments.find('[data-name=\"ObjectListItem\"]').each(function () {\r\n var jMe = $(this);\r\n var kind = jMe.attr(\"kind\");\r\n var additionalAttachmentInfo = \"\";\r\n if (kind === 'Ref') {\r\n additionalAttachmentInfo = \"_\" + jMe.attr(\"compcode\");\r\n }\r\n AttachmentStr.push(kind + \"_\" + jMe.attr(\"id\") + additionalAttachmentInfo);\r\n })\r\n return '&Attachments=' + AttachmentStr.join(';');\r\n }\r\n return \"\";\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Задания=========================================================================================================================================== */\r\nfunction ShowJobCard() {\r\n DoAction('view=JobCard&-op&-val', false);\r\n}\r\nfunction ShowJobAttachments() {\r\n DoAction('view=attach&-op&-val', false);\r\n}\r\nfunction ShowJobState() {\r\n DoAction('view=state&-op&-val', false);\r\n}\r\nfunction GetJobEdit() {\r\n var mode = GetParamInURL(\"mode\");\r\n if (mode.toLowerCase() == \"edit\") {\r\n //Шамов А.: Сделано для оптимизации. Если режим не указан, в серверном коде будет отправлен запрос для получения типа задания,\r\n // он нам нужен что бы задания-контроль всегда открывать заблокированными.\r\n const modeParam = (WA.current.Kind === JOB_KIND.CONTROLJOB) ? \"-mode\" : \"mode=read\"\r\n if (WA.CR.CardTab.mainTab && WA.CR.CardTab.mainTab.isModifiedByUser()) {\r\n ConfirmDialogNew(L('UNSAVED_CHANGES_WILL_BE_LOST'), () => { \r\n UnbindBeforeUnload();\r\n DoAction(modeParam, false);\r\n });\r\n } else {\r\n DoAction(modeParam, false);\r\n } \r\n } else {\r\n DoAction(\"mode=edit\", false);\r\n }\r\n}\r\n\r\nfunction SetJobApproveParams() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=SaveAskParams', true);\r\n}\r\nfunction CancelSetJobApproveParams() {\r\n DoAction('view=JobCard&-op&-mode&-val', false);\r\n}\r\n\r\n/**\r\n * Принимает задание-контроль.\r\n * \r\n * @method BaseAcceptContolJob\r\n * @deprecated since 5.7. Use Core.toolBars.job.acceptContolJob(resultIndex) instead.\r\n */\r\nfunction BaseAcceptContolJob(resultIndex) {\r\n Core.toolBars.job.acceptContolJob(resultIndex)\r\n}\r\n\r\n/**\r\n * Отклоняет задание контроль.\r\n * \r\n * @method ResumeContolJob\r\n * @deprecated since 5.7. Use Core.toolBars.job.resumeContolJob() instead.\r\n */\r\nfunction ResumeContolJob() {\r\n Core.toolBars.job.resumeContolJob()\r\n}\r\n\r\nfunction CreateJobSubTask() {\r\n window.open(PrepareUrl(location.href, 'view=JobCard&op=newsubtask'));\r\n}\r\nfunction CloseBaseJobWindow(jobId) {\r\n window.onunload = function () { FreeJob(jobId); }\r\n}\r\nfunction FreeJob(JobID) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Job.asmx/FreeJob\" + WSSParam,\r\n data: \"{'JobID':'\" + JobID + \"'}\",\r\n async: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Задача============================================================================================================================================ */\r\nfunction ShowTaskCard() {\r\n DoAction('-view&-op&-showall', false);\r\n}\r\nfunction ShowAttachments() {\r\n DoAction('view=attach&-op&-showall', false);\r\n}\r\nfunction ShowState() {\r\n DoAction('view=state&-op&-showall', false);\r\n}\r\nfunction ShowTaskHistory() {\r\n DoAction('view=TaskHistory&-op&-ver&-showall', false);\r\n}\r\n\r\nfunction EnterEditMode() {\r\n var mode = GetParamInURL(\"mode\");\r\n if (mode.toLowerCase() == \"edit\") {\r\n DoAction(\"mode=read\", false);\r\n }\r\n else {\r\n DoAction(\"mode=edit\", false);\r\n }\r\n}\r\nfunction SaveInTask() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=SaveTask', true);\r\n}\r\nfunction SaveAndCloseTask() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=SaveAndCloseTask', true);\r\n}\r\nfunction CreateSubTask() {\r\n window.open(PrepareUrl(location.href, 'mode=newsubtask&-view&-op&-showall'));\r\n}\r\nfunction BaseChangeStandartRoute(el, css) {\r\n if (!$(el).hasClass(css)) {\r\n DoAction('op=ChangeRoute', false);\r\n } else {\r\n ShowTaskCard();\r\n }\r\n}\r\nfunction LoadRouteParams(route_id) {\r\n DoAction('__POSTBACK_ACTION=ChangeSelRoute', true);\r\n}\r\nfunction StandartRouteSelected() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=SaveAskParams', true, RemoveParamInURL($('form:first').attr('action'), 'isNew'));\r\n}\r\nfunction BaseCancelStandartRoute(callback) {\r\n UnbindBeforeUnload();\r\n if (GetParamInURL('isNew') == '1') {\r\n callback();\r\n } else {\r\n DoAction('__POSTBACK_ACTION=ClearSelRoute', true);\r\n }\r\n}\r\nfunction CloseBaseTaskWindow(taskId) {\r\n window.onunload = function () { FreeTask(taskId); }\r\n}\r\nfunction FreeTask(TaskID) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Task.asmx/FreeTask\" + WSSParam,\r\n data: \"{'TaskID':'\" + TaskID + \"'}\",\r\n async: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Документ========================================================================================================================================== */\r\n//Панель представлений.\r\nfunction ShowEDocCard() {\r\n DoAction('view=ShowEDoc&-op&-ver&-showall', false);\r\n}\r\nfunction ShowVersionList() {\r\n DoAction('view=ShowVerList&-op&-ver&-showall', false);\r\n}\r\nfunction ShowRightsList() {\r\n DoAction('view=RightsList&-op&-ver&-showall', false);\r\n}\r\nfunction ShowSignInfo() {\r\n DoAction('view=SignInfoEDoc&-op&-ver&-showall', false);\r\n}\r\nfunction ShowBoundEDocs() {\r\n DoAction('view=BoundEDocs&-op&-ver&-showall', false);\r\n}\r\nfunction ShowEDocHistory() {\r\n DoAction('view=EDocHistory&-op&-ver&-showall', false);\r\n}\r\nfunction ShowEDocPreview() {\r\n DoAction('view=EDocPreview&-op&-ver&-showall', false);\r\n}\r\n\r\n/**\r\n* Изменяет режим карточки по кнопке Изменить.\r\n* @global\r\n* @function EditModeForEDoc\r\n*/\r\nfunction EditModeForEDoc() {\r\n const url = new WA.URL();\r\n const mode = url.getParam('mode'); \r\n const view = url.getParam('view');\r\n if (!view || view.toUpperCase() === 'CARD') {\r\n const newMode = (mode.toLowerCase() === 'edit' || mode.toLowerCase() === 'new') ? 'read': 'edit';\r\n const params = {\r\n DocumentID: WA.CR.ID,\r\n Mode: newMode.toUpperCase(),\r\n View: WA.CR.getReferenceView(), \r\n };\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n\r\n const _toggleChange = () => {\r\n WA.SRV.request('Document.asmx/ChangeMode', params).done(result => {\r\n WA.CR.form.undoRequisiteChanges();\r\n\r\n const model = JSON.parse(result);\r\n\r\n // Применить изменения, которые пришли с сервера\r\n WA.CR.form.applyServerSideChanges(\r\n model.Changes,\r\n model.ChangedMultiSelectRequisitesValues,\r\n );\r\n\r\n if (newMode === 'edit') {\r\n WA.CR.form.enable();\r\n } else {\r\n WA.CR.form.disable();\r\n }\r\n url.setParam('mode', newMode);\r\n history.pushState({\r\n title: document.title,\r\n url: url.asString(),\r\n }, document.title, url.asString());\r\n // Обновляем тулбар.\r\n WA.CR.initToolbar('ToolbarContainer', model.ToolBarModel);\r\n }).fail((message, response) => {\r\n const severity = (response.Severity !== '-1' ? Number(response.Severity) : undefined);\r\n WA.CR.inlineHint.show(response.Error, undefined, severity, INLINE_HINT_PRIORITY.PRIMARY);\r\n }); \r\n };\r\n if (WA.CR.form.isChanged()) {\r\n ConfirmDialogNew(L('UNSAVED_CHANGES_WILL_BE_LOST'), () => { \r\n _toggleChange();\r\n });\r\n } else {\r\n _toggleChange();\r\n } \r\n } else {\r\n if (mode.toLowerCase() === 'edit' || mode.toLowerCase() === 'new') {\r\n DoAction('mode=read&-ver', false);\r\n } else {\r\n DoAction('mode=edit&-ver', false);\r\n }\r\n } \r\n}\r\n\r\n/**\r\n* Обновляет родительское окно.\r\n* @global\r\n* @function UpdateOpenerWindow\r\n* @deprecated\r\n*/\r\n\r\n/**\r\n* Обновляет родительское окно при закрытии текущего.\r\n* @global\r\n* @function UpdateOpenerWindowOnClose\r\n* @deprecated\r\n*/\r\n\r\nfunction SaveInDoc(callback) {\r\n //UnbindBeforeUnload();\r\n ShowTopSpinner(L('EDOC_SAVING'));\r\n\r\n var isNeedAddInAttachments = false;\r\n\r\n var data = { DocumentID: parseInt(GetParamInURL('id'), 10), Password: '', EncryptionKey: '' };\r\n data.receiverObjectLink = null;\r\n var currentUrl = new WA.URL();\r\n if (currentUrl.getParam('mode').toLowerCase() === 'new') {\r\n if (currentUrl.getParam('cwid') != '') {\r\n var type = currentUrl.getParam('cwtype') === 'task' ? OBJECT_TYPE.TASK : OBJECT_TYPE.JOB;\r\n data.receiverObjectLink = new WA.Link(parseInt(currentUrl.getParam('cwid'), 10), type);\r\n isNeedAddInAttachments = true;\r\n } else {\r\n if (GetParamInURL('folder') != '') {\r\n data.receiverObjectLink = new WA.Link(parseInt(currentUrl.getParam('folder'), 10), OBJECT_TYPE.FOLDER);\r\n }\r\n }\r\n }\r\n var view = GetParamInURL('view');\r\n switch (view.toUpperCase()) {\r\n case 'RIGHTSLIST':\r\n SaveRights(function (res) {\r\n if (res.Success) {\r\n save_ok();\r\n } else {\r\n save_fail(res.Error);\r\n }\r\n });\r\n break;\r\n case '':\r\n case 'SHOWEDOC':\r\n case 'CARD':\r\n WA.CR.form.saveAndAttach(function (ok, warningMessage) {\r\n if (ok) {\r\n const parentId = GetParamInURL('parentId');\r\n if (parentId != '' && parentId > 0) {\r\n if (window.opener.location.pathname.toLowerCase() === '/doc.aspx') {\r\n const srcLink = { id: WA.current.ID, Kind: 'EDOC', CompCode: '' };\r\n const dstLink = { id: parentId, Kind: 'EDOC', CompCode: '' };\r\n WA.SRV.call('/Session.asmx/BindObjects', {\r\n SourceLink: dstLink,\r\n DestLink: srcLink,\r\n }).done(() => {\r\n window.opener.location.reload();\r\n });\r\n }\r\n else {\r\n var docLink = { id: WA.current.ID, Kind: 'EDOC', CompCode: '' };\r\n var refLink = { id: parentId, Kind: 'REF', CompCode: '' };\r\n WA.SRV.call('/Session.asmx/BindLinksToRefRecord', {\r\n Record: refLink,\r\n Links: [docLink],\r\n }).done(() => {\r\n window.opener.location.reload();\r\n });\r\n }\r\n }\r\n save_ok(warningMessage);\r\n }\r\n else save_fail();\r\n }, true, data.receiverObjectLink);\r\n break;\r\n case 'SHOWVERLIST':\r\n var edocid = WA.current.ID;\r\n var stage = $('.State_Table').find('input[id$=\"EdocLifeStage\"]').val();\r\n WA.SRV.call(\"/EDocument.asmx/ChangeEdocLifeStage\", {\r\n EDocID: edocid,\r\n Stage: stage\r\n }).done(function (model) {\r\n save_ok();\r\n }).fail(function (error) {\r\n save_fail(error);\r\n });\r\n break;\r\n default:\r\n save(data);\r\n }\r\n\r\n function save_ok(warningMessage, needReload = true) {\r\n if (WA.CMP.NTF.InlineHint) {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n if (warningMessage) WA.CR.inlineHint.showWarning(warningMessage);\r\n }\r\n\r\n WA.CR.window.reloadParentWindowOnClose();\r\n\r\n if (window.opener) {\r\n try {\r\n // Вставка ссылки на документ во вложения.\r\n if (isNeedAddInAttachments && (window.opener.WA.getLocation() === 'task' || window.opener.WA.getLocation() === 'job')) {\r\n window.opener.AddAttachment(new WA.Link(WA.CR.ID, OBJECT_TYPE.EDOCUMENT));\r\n }\r\n if (window.opener.NeedUpdateOnChildClose) {\r\n // хак для обновления проводника, потому что карточка документа создается из эксплорера из айфрейма. поэтому здесь window.parent - пустой и нельзя у него вызвать ReloadExplorer\r\n //window.open(\"javascript:void(0)\", \"explorer\").location = window.open(\"javascript:void(0)\", \"explorer\").location;\r\n this.focus();\r\n }\r\n }\r\n catch (e) { }\r\n }\r\n\r\n function CallbackOrAction() {\r\n if (callback) {\r\n callback();\r\n } else { \r\n if (needReload) {\r\n UnbindBeforeUnload(); // отключаем проверку когда уже все нормально сохранилось\r\n DoAction('mode=edit', false);\r\n } else {\r\n // Переведем в режим редактирования без перезагрузки.\r\n const sideBarTabs = WA.CR.sideBar.tabs.toArray();\r\n sideBarTabs.forEach((tab) => {\r\n tab.enable();\r\n });\r\n const url = new WA.URL();\r\n url.setParam('mode', 'edit');\r\n history.pushState({\r\n title: document.title,\r\n url: url.asString(), \r\n }, document.title, url.asString());\r\n } \r\n }\r\n }\r\n\r\n if (GetParamInURL('mode').toLowerCase() == 'new') {\r\n if ($('html').hasClass('mobile')) {\r\n var id = GetParamInURL('id');\r\n var f = $(\"form:first\");\r\n var url = f.attr('action');\r\n url = ChangeParamInURL(url, 'view', 'Card');\r\n url = ChangeParamInURL(url, 'id', id);\r\n url = RemoveParamInURL(url, 'mode');\r\n f.attr('action', url);\r\n f.submit();\r\n }\r\n else {\r\n ShowSetDocumentRightsDialog(CallbackOrAction);\r\n }\r\n }\r\n else {\r\n CallbackOrAction();\r\n }\r\n }\r\n\r\n function save_fail(err) {\r\n HideTopSpinner();\r\n if (err) {\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showError(err, null, INLINE_HINT_PRIORITY.PRIMARY); \r\n });\r\n }\r\n }\r\n\r\n function save(data) {\r\n CallService(\"/Document.asmx/Save\", data, function (res) {\r\n if (!res.Success) {\r\n save_fail(res.Error);\r\n } else {\r\n HideTopSpinner();\r\n HideTopSpinner(L(\"EDOC_SAVE_COMPLETE\"), 2000);\r\n save_ok();\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction SaveWithEncoding(save, data) {\r\n var passwordChkbox = $('#EncryptWithPasswordCheckBox');\r\n var certChkBox = $('#EncryptWithCertCheckBox');\r\n var onError = function (error) { certChkBox.attr('checked', true); passwordChkbox.data('password', null); HideTopSpinner(); ShowError(error); };\r\n data.EncryptionKey = '';\r\n if (passwordChkbox.is(':checked') && !!!passwordChkbox.data('password') && passwordChkbox.data('password') != \"\") {\r\n var dialog = RequestPasswordForDecryption('', function (password) {\r\n data.Password = password;\r\n if (WA.Document.Encoding % 2 == 1) {\r\n //FIXME: переделать на WA.agent.getDocumentDecryptionKey\r\n GetEncryptionKeyForDoc(WA.Document.ID, WA.Document.Encoding, WA.Document.PluginName, password, function (encryptionKey) {\r\n data.EncryptionKey = encryptionKey;\r\n save(data);\r\n }, onError);\r\n return;\r\n }\r\n save(data);\r\n }); \r\n return;\r\n }\r\n if (!!passwordChkbox.data('password') && passwordChkbox.data('password') != '') data.Password = passwordChkbox.data('password');\r\n if (WA.Document.Encoding % 2 == 1) {\r\n //FIXME: переделать на WA.agent.getDocumentDecryptionKey\r\n GetEncryptionKeyForDoc(WA.Document.ID, WA.Document.Encoding, WA.Document.PluginName, data.Password, function (encryptionKey) {\r\n data.EncryptionKey = encryptionKey;\r\n save(data);\r\n }, onError);\r\n return;\r\n }\r\n save(data);\r\n}\r\n\r\nfunction GetEncryptionKeyForDoc(docID, encoding, pluginName, password, onSuccess, onError) {\r\n RequestToken(TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n WebAccess.agent.transmitRequest(\"getdocdecryptedkey\", \"edmsplugin\",\r\n {\r\n \"DocID\": docID,\r\n \"Version\": 0,\r\n \"Token\": token,\r\n \"EncodeType\": encoding,\r\n \"EncryptionPluginName\": pluginName,\r\n \"Password\": password\r\n }).done(function (response) {\r\n if (onSuccess) { onSuccess(response.result); }\r\n }).fail(function (response) {\r\n if (onError) onError(response.message);\r\n });\r\n }, docID, 0);\r\n}\r\n\r\nfunction SaveRights(callback, error) {\r\n var src = $('#__SELECTED_USERS').val();\r\n var res = [];\r\n var rightsJson = '';\r\n var rightsChanged = false;\r\n\r\n //Проверка наличия полных прав\r\n if (!IsRightsListValid()) {\r\n HideTopSpinner();\r\n return ShowInfo(L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\"));\r\n }\r\n\r\n var currentRights = $('#__CURRENT_USERS_RIGHTS');\r\n if (!!!currentRights.data('changed') || currentRights.data('changed') == '0') currentRights.data('changed', CheckRightsHaveChanged(currentRights.val(), src) ? '1' : '0');\r\n var newEcoding = GetDocNewEncoding($('#EncryptWithPasswordCheckBox'), $('#EncryptWithCertCheckBox'));\r\n\r\n if (currentRights.data('changed') == '1' || (newEcoding > 0 && src.indexOf('g_') != -1)) {\r\n var rightRecords = src.split(';');\r\n for (var i = 0; i < rightRecords.length; i++) {\r\n var rec = $.trim(rightRecords[i]);\r\n if (rec) {\r\n var parts = rec.split('-');\r\n var id = parts[0];\r\n var right = [16, 8, 4][parseInt(parts[1], 10)]; // 0 -> 16 (full), 1 -> 8 (change), 2 -> 4 (view)\r\n var isGroup = false;\r\n if (id.indexOf('g_') == 0) {\r\n id = id.substr(2);\r\n if (newEcoding == 0) {\r\n isGroup = true;\r\n }\r\n else {\r\n RequestActionWithGroup(id, parts[1], function () { SaveRights(callback, error); });\r\n return;\r\n }\r\n }\r\n res.push({ UserID: +id, IsGroup: isGroup, RightType: right });\r\n }\r\n }\r\n rightsJson = $.toJSON(res);\r\n rightsChanged = true;\r\n }\r\n var rightsDelegationSetting = GetRightsDelegationSettingValue();\r\n var rightsDelegationInitVal = $('#RightsDelegationCheckBox').data('initval') == 1;\r\n var rightsDelegationChanged = rightsDelegationSetting != rightsDelegationInitVal;\r\n SetEncryptionForDocument({ RightsJSON: rightsJson, RightsDelegationTurnedOn: rightsDelegationSetting }, rightsChanged || rightsDelegationChanged, callback);\r\n}\r\n\r\nfunction RequestActionWithGroup(groupID, accessLevel, onActionSelected) {\r\n var actions = [L('ADD_GROUP_AND_SUBGROUPS_USERS'), L('ADD_GROUP_USERS_ONLY'), L('REMOVE_GROUP_FROM_ACCESS_RIGHTS')];\r\n var html = '
' + L('CANNOT_USE_USERGROUPS_WITH_ENCRYPTION') + '
';\r\n html += '
';\r\n html += '
';\r\n html += '
' + L('LOCAL_COPY_OPTIONS') + '
';\r\n html += '
';\r\n for (var i = 0; i < actions.length; i++) {\r\n var needCheck = (i == 0);\r\n html += '
'\r\n + ''\r\n + '
';\r\n }\r\n html += '
';\r\n\r\n var mbox = new WA.CMP.dialogs.MessageBox();\r\n mbox.width = 450;\r\n mbox\r\n .okCancelButtons(function () {\r\n var opcode = $('#actionOptions').find('input:checked').attr('opcode');\r\n switch (opcode) {\r\n case \"0\": OpenUpUserGroup(groupID, accessLevel, true, onActionSelected); break;\r\n case \"1\": OpenUpUserGroup(groupID, accessLevel, false, onActionSelected); break;\r\n case \"2\":\r\n $('tr#current_g_' + groupID + ',tr#new_g_' + groupID).find('.rights-table__delete-row').click();\r\n if (onActionSelected) onActionSelected();\r\n break;\r\n }\r\n }, function () { HideTopSpinner(); });\r\n var groupName = $('tr#current_g_' + groupID + ',tr#new_g_' + groupID).children('.Rights_Table_td').children().text();\r\n mbox.showQuestion(L('ADD_GROUP_USERS_TO_ENCODED_OBJECT_RIGHTS', groupName), html);\r\n}\r\n\r\nfunction OpenUpUserGroup(groupID, accessLevel, needOpenSubgroups, onGroupOpened) {\r\n WA.SRV.call('/UserList.asmx/GetUsersInGroup', { 'GroupID': groupID, 'NeedProcessSubGroups': needOpenSubgroups, 'RenderItems': true })//'ObjectID': WA.current.ID, 'ObjectType': 1, 'Filtrator': '' })\r\n .success(function (items) {\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n if (AddUserByDiv($(item.text)[0])) {\r\n // устанавливаем нужные права только у добавленных пользователей\r\n $('tr#current_' + item.id + ',tr#new_' + item.id).children('.rights-table__column_current-rights').find('[name=' + accessLevel + ']').click();\r\n }\r\n }\r\n // удаляем группу из таблицы\r\n $('tr#current_g_' + groupID + ',tr#new_g_' + groupID).find('.rights-table__delete-row').click();\r\n if (onGroupOpened) onGroupOpened();\r\n });\r\n}\r\n\r\nfunction GetRightsDelegationSettingValue() {\r\n var RightsDelegationCheckBoxVal = false;\r\n var RightsDelegationCheckBox = $('#RightsDelegationCheckBox');\r\n if (RightsDelegationCheckBox.length) { RightsDelegationCheckBoxVal = RightsDelegationCheckBox.is(':checked'); }\r\n return RightsDelegationCheckBoxVal;\r\n}\r\n\r\nfunction CheckRightsHaveChanged(oldValue, newValue) {\r\n if (oldValue.length != newValue.length) return true;\r\n if (oldValue[oldValue.length - 1] == ';') oldValue = oldValue.substr(0, oldValue.length - 1);\r\n if (newValue[newValue.length - 1] == ';') newValue = newValue.substr(0, newValue.length - 1);\r\n if (oldValue.split(';').sort().join(';') != newValue.split(';').sort().join(';')) return true;\r\n return false;\r\n}\r\n\r\nfunction SetEncryptionForDocument(RightsObject, RightsChanged, OnEncryptionSet) {\r\n var passwordCheckBox = $('#EncryptWithPasswordCheckBox');\r\n var certCheckBox = $('#EncryptWithCertCheckBox');\r\n var password = !!passwordCheckBox.data('password') ? passwordCheckBox.data('password') : '';\r\n var currentEncoding = WA.Document.Encoding;\r\n var newEncoding = GetDocNewEncoding(passwordCheckBox, certCheckBox);\r\n var encryptionKey = \"\";\r\n if (currentEncoding != newEncoding || RightsChanged) {\r\n RightsObject.EncodingType = newEncoding;\r\n RightsObject.Password = password;\r\n SaveWithEncoding(function (res) {\r\n RequestSetEncryption(currentEncoding, res, OnEncryptionSet);\r\n }, RightsObject);\r\n return;\r\n }\r\n if (OnEncryptionSet) OnEncryptionSet({ Success: true, EncodingChanged: RightsChanged });\r\n}\r\n\r\nfunction RequestSetEncryption(currentEncoding, RightsObject, OnEncryptionSet) {\r\n RightsObject.DocumentID = WA.Document.ID;\r\n WA.SRV.call(\"/Document.asmx/SetEncryption\", RightsObject) //{ \"DocumentID\": WA.Document.ID, \"EncodingType\": newEncoding, \"Password\": password, \"EncryptionKey\": encryptionKey })\r\n .success(\r\n function (res) {\r\n //WA.current.toolBar.buttons.ChangeDocPassword.enable();\r\n var encChanged = (WA.Document.Encoding != RightsObject.EncodingType && $('#__CURRENT_USERS_RIGHTS').data('changed') == '1');\r\n WA.Document.Encoding = RightsObject.EncodingType;\r\n HideTopSpinner(L(\"EDOC_SAVE_COMPLETE\"), 2000);\r\n if (OnEncryptionSet) OnEncryptionSet({ Success: true, EncodingChanged: encChanged });\r\n })\r\n .fail(\r\n function (res) {\r\n var passwordCheckBox = $('#EncryptWithPasswordCheckBox');\r\n passwordCheckBox.data('password', null);\r\n if (currentEncoding < 2) passwordCheckBox.removeAttr(\"checked\");\r\n else passwordCheckBox.attr('checked', true);\r\n if (currentEncoding % 2 == 1) $('#EncryptWithCertCheckBox').attr(\"checked\");\r\n else $('#EncryptWithCertCheckBox').removeAttr(\"checked\");\r\n if (OnEncryptionSet) OnEncryptionSet({ Success: false, Error: res });\r\n //WA.current.toolBar.buttons.ChangeDocPassword.disable();\r\n });\r\n return;\r\n}\r\n\r\nfunction GetDocNewEncoding(passwordCheckBox, certCheckBox) {\r\n var encoding = 0;\r\n var certEncryptEnabled = certCheckBox.is(':checked');\r\n if (certEncryptEnabled) {\r\n encoding++;\r\n }\r\n if (passwordCheckBox.is(':checked')) {\r\n encoding = 2;\r\n if (certEncryptEnabled) {\r\n encoding++;\r\n }\r\n }\r\n return encoding;\r\n}\r\n\r\nfunction ChangeTabDoc(tabName) {\r\n const ChangeTab = () => {\r\n const url = new WA.URL();\r\n const view = url.getParam('view'); \r\n if (tabName === 'close') {\r\n WA.CR.spinner.show(L('PLEASE_WAIT'));\r\n SaveInDoc(() => {\r\n CloseDocWindow(L('DATA_DIDNT_SAVE'), GetParamInURL('id'));\r\n });\r\n } else {\r\n const mode = url.getParam('mode').toLowerCase();\r\n if (['export', 'explock', 'editlock'].includes(mode)) { // если мы попали сюда при неудачной попытке экспорта, то уберем mode\r\n WA.CR.spinner.show(L('PLEASE_WAIT'));\r\n DoAction(`view=${tabName}&-op&-val&-ver&-ShowAll&-mode`, false);\r\n } else {\r\n if ((!view || view.toUpperCase() === 'CARD') && WA.CR.form.isChanged()) { \r\n ConfirmDialogNew(L('UNSAVED_CHANGES_WILL_BE_LOST'), () => { \r\n WA.CR.spinner.show(L('PLEASE_WAIT')); \r\n UnbindBeforeUnload(); \r\n DoAction(`view=${tabName}&-op&-val&-ver&-ShowAll`, false);\r\n }); \r\n } else {\r\n WA.CR.spinner.show(L('PLEASE_WAIT'));\r\n DoAction(`view=${tabName}&-op&-val&-ver&-ShowAll`, false);\r\n } \r\n }\r\n }\r\n }\r\n ChangeTab();\r\n}\r\nfunction UndoEDoc() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=UndoEDoc', true);\r\n}\r\n\r\nfunction SaveAndCloseEDoc() {\r\n UnbindBeforeUnload();\r\n SaveInDoc(function () {\r\n CloseDocWindow(L(\"DATA_DIDNT_SAVE\"), GetParamInURL(\"id\"));\r\n if (window.opener && window.opener.timeoutHandler) {\r\n clearTimeout(window.opener.timeoutHandler);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Снять или установить блокировки.\r\n *\r\n * @function LockUnlock\r\n */\r\nfunction LockUnlock() {\r\n\r\n var isLocked = $('#islocked').val() == \"1\";\r\n var jButton = $('[name=LockUnlock]');\r\n\r\n WA.SRV.call(isLocked ? '/Document.asmx/Unlock' : '/Document.asmx/Lock', {\r\n DocumentID: WA.CR.ID,\r\n UseGlobalLock: false\r\n }).done(function () {\r\n var toastMsg = new WA.CMP.notifications.Toast();\r\n\r\n if (!isLocked) {\r\n toastMsg.showSuccess(L('DOC_SUCCESS_LOCK'));\r\n } else {\r\n toastMsg.showSuccess(L('DOC_SUCCESS_UNLOCK'));\r\n WA.CR.inlineHint.hide();\r\n }\r\n\r\n window.location.href = ChangeParamInURL(window.location.href, 'Parent', 'Doc');\r\n });\r\n}\r\nfunction DocSendAsAttachment() {\r\n if (/\\/pda\\//.test(location.pathname))\r\n DoAction('op=SendAsAttach', false);\r\n else\r\n window.open(PrepareUrl(location.href, 'op=SendAsAttach'));\r\n}\r\n// Экспорт\r\nfunction Export(id, selectId, checkedId, inNewWindow) {\r\n UnbindBeforeUnload();\r\n var VerNumber = $(\"#\" + selectId + \" option:selected\").val();\r\n var url;\r\n var WSSParam = GetWSSParam(location.href, false);\r\n if ($(\"#\" + checkedId).is(':checked')) { url = \"/Doc.aspx?ID=\" + id + \"&view=ShowVerList&ver=\" + VerNumber + \"&mode=ExpLock\" + WSSParam; }\r\n else { url = \"/Doc.aspx?ID=\" + id + \"&view=ShowVerList&ver=\" + VerNumber + \"&mode=Export\" + WSSParam; };\r\n if (inNewWindow) {\r\n window.open(url, \"VersionBody\", \"\");\r\n CloseExportDlg();\r\n } else {\r\n location.href = url;\r\n /* Делать нельзя, т.к. валиться IEMobile.\r\n setTimeout('CloseExportDlg()', 1000);*/\r\n }\r\n}\r\nfunction CloseExportDlg() {\r\n UnbindBeforeUnload();\r\n var EDocID = GetParamInURL(\"id\");\r\n FreeEDoc(EDocID);\r\n if (document.referrer.toLowerCase().indexOf(\"explorer.aspx\") != -1) {\r\n window.close();\r\n } else {\r\n var url = window.location.href;\r\n url = RemoveParamInURL(url, \"op\", \"\");\r\n if (\"undefined\" != typeof (GetParamInURL(\"ver\"))) {\r\n url = RemoveParamInURL(url, \"ver\");\r\n }\r\n window.location.href = url;\r\n }\r\n}\r\nfunction ChkExportedVersion(VerList, EDocID, ChkLockID) {\r\n var result = {};\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/EDocument.asmx/CheckVersionStateForExport\" + WSSParam,\r\n data: \"{'EDocID':'\" + EDocID + \"', 'VerNum':'\" + VerList.value + \"', 'IsExport':'true'}\",\r\n async: false,\r\n cache: false,\r\n success: function (res) {\r\n if (!CheckForLoginPage(res.d)) {\r\n result = res.d;\r\n if (result.Error) {\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showError(result.Error, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n } else if (!!result.Warning) {\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showWarning(result.Warning, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n }\r\n \r\n let enableLock = result.EnableLock === 'true';\r\n let el = $(\"#\" + ChkLockID);\r\n if (enableLock) {\r\n el.removeAttr('disabled');\r\n } else {\r\n el.attr('disabled', 'disabled').prop('checked', false);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n// Импорт и создание документа\r\nfunction GetImgByExt(ext) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/EDocument.asmx/GetImgByExt\" + WSSParam,\r\n data: \"{'Extension':'\" + ext + \"'}\",\r\n async: false,\r\n cache: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\n// Импорт\r\nfunction CloseImportDlg() {\r\n UnbindBeforeUnload();\r\n var EDocID = GetParamInURL(\"id\");\r\n FreeEDoc(EDocID);\r\n if (document.referrer.toLowerCase().indexOf(\"explorer.aspx\") != -1 || GetParamInURL(\"place\").toLowerCase().indexOf(\"explorer\") != -1) {\r\n window.close();\r\n } else {\r\n var url = window.location.href;\r\n url = RemoveParamInURL(url, \"op\", \"\");\r\n if (\"undefined\" != typeof (GetParamInURL(\"ver\"))) {\r\n url = RemoveParamInURL(url, \"ver\");\r\n }\r\n url = RemoveParamInURL(url, \"mode\");\r\n window.location = url;\r\n }\r\n}\r\n// Общие\r\nfunction BaseCloseDocWindow(edocId) {\r\n window.onunload = function () { FreeEDoc(edocId); };\r\n}\r\nfunction FreeEDoc(EDocID) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/EDocument.asmx/FreeEDoc\" + WSSParam,\r\n data: \"{'EDocID':'\" + EDocID + \"'}\",\r\n async: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Папки============================================================================================================================================= */\r\nfunction ShowFolderCard() {\r\n DoAction('view=Card&-UpdateExplorer', false);\r\n}\r\nfunction ShowFolderRights() {\r\n DoAction('view=RightsList&-UpdateExplorer', false);\r\n}\r\nfunction UndoFolderCard() {\r\n UnbindBeforeUnload();\r\n DoAction('__POSTBACK_ACTION=Undo&-UpdateExplorer', true);\r\n}\r\nfunction EnterEditMode_FolderCard() {\r\n var mode = GetParamInURL(\"mode\");\r\n if (mode.toLowerCase() == \"edit\") {\r\n DoAction(\"mode=read&-UpdateExplorer\", false);\r\n } else {\r\n DoAction(\"mode=edit&-UpdateExplorer\", false);\r\n }\r\n}\r\n\r\n\r\n\r\nfunction ChangeTabFolder(tabName) {\r\n ShowTopSpinner(L(\"PLEASE_WAIT\"), false);\r\n if (tabName != 'RightsList') {\r\n if (!IsRightsListValid()) {\r\n $.when(WA.FormControlsInit).then(() => {\r\n let message = L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\");\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showError(message, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n }); \r\n } else {\r\n DoAction('view=' + tabName + '&-op&-val&-ver&-ShowAll', false);\r\n }\r\n } else {\r\n DoAction('view=' + tabName + '&-op&-val&-ver&-ShowAll', false);\r\n }\r\n}\r\n\r\nfunction BaseCloseFolderCardWindow(folderId) {\r\n window.onunload = function () { FreeFolder(folderId); }\r\n}\r\nfunction FreeFolder(folderId) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Folder.asmx/FreeFolder\" + WSSParam,\r\n data: \"{'FolderID':'\" + folderId + \"'}\",\r\n async: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\nfunction SaveFolderCard(need_close, noCheckSubObj) {\r\n var FolderKind = $('#hiddctl00_MainContent_ctl00_Kind').val();\r\n var FolderID = WA.CR.ID;\r\n\r\n // В мобильной версии права применять только к папке.\r\n if (WA.isMobile())\r\n noCheckSubObj = true;\r\n\r\n if (!IsRightsListValid()) {\r\n HideTopSpinner();\r\n $.when(WA.FormControlsInit).then(() => {\r\n let message = L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\");\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showError(message, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n }); \r\n return;\r\n } else {\r\n if (!noCheckSubObj && (!WA.isMobile() && WA.CR.sideBar.tabs.current.name === \"RightsList\")) {\r\n var selectedUsers = $('input[name=__SELECTED_USERS]').val();\r\n var currentRights = $('input[name=__CURRENT_USERS_RIGHTS]').val();\r\n\r\n if (selectedUsers !== currentRights) {\r\n if (!checkCurrentUserRights()) {\r\n var dialog = new WA.CMP.dialogs.MessageBox();\r\n\r\n var mainText = L('NO_FOLDER_FULL_RIGHTS')\r\n var additionalText = L('NO_FOLDER_FULL_RIGHTS_ADDITIONAL');\r\n var title = L('WARNING');\r\n\r\n dialog.removeDefaultButtons();\r\n dialog.addButton('Continue', L('PROCEED_SAVING'), function () {\r\n saveRightsByService(FolderID, need_close);\r\n });\r\n dialog.addButton('RestoreRights', L('RESTORE_RIGHTS'), function () {\r\n // Восстанавливаем полные права текущему пользователю\r\n $('input[name=__SELECTED_USERS]').val(selectedUsers + ';' + CurrentUserID + '-0');\r\n saveRightsByService(FolderID, need_close);\r\n });\r\n dialog.addButton('Cancel', L('CANCEL'), function () { });\r\n\r\n dialog.show(mainText, additionalText, title, 'warning');\r\n } else {\r\n saveRightsByService(FolderID, need_close);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // пошлем запрос на сервер о необходимости задать вопрос пользователю.\r\n if (FolderKind != null && FolderID != \"\") {\r\n // отобразим ожидание.\r\n if (typeof (ShowTopSpinner) != 'undefined') ShowTopSpinner(L(\"PLEASE_WAIT\"));\r\n\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Folder.asmx/CheckFolderType\" + WSSParam,\r\n data: \"{'FolderID':'\" + FolderID + \"', 'FolderKind':'\" + FolderKind + \"'}\",\r\n cache: false,\r\n success: function (res) {\r\n if (!CheckForLoginPage(res.d)) {\r\n SaveFolderCard_WithQuestions(res.d, need_close);\r\n }\r\n }\r\n });\r\n return;\r\n }\r\n\r\n SaveFolderCard_WithQuestions(null, need_close);\r\n}\r\n\r\nfunction SaveAndCloseFolder() {\r\n SaveFolderCard(true);\r\n}\r\n\r\nfunction SaveFolderCard_WithQuestions(msg, need_close) {\r\n if (typeof (HideTopSpinner) != 'undefined') HideTopSpinner(\"\", 1);\r\n\r\n function ok() {\r\n UnbindBeforeUnload();\r\n DoAction(format('__POSTBACK_ACTION={0}&-UpdateExplorer', need_close ? 'SaveAndClose' : 'Save'), true);\r\n }\r\n\r\n function cancel() {\r\n $('div.saving').hide();\r\n }\r\n\r\n if (msg == null) {\r\n ok();\r\n } else {\r\n ConfirmDialogNew(msg, ok, cancel);\r\n }\r\n}\r\n\r\nfunction saveRightsByService(folderID, needClose) {\r\n // проверим, не пустая ли папка\r\n WA.SRV.call('/Folder.asmx/GetContentCount', { \"FolderID\": folderID }).done(function (res) {\r\n if (res > 0) {\r\n // Если есть вложенные элементы, узнаем, надо ли изменять на них права.\r\n rightsToSubObjectsDialog(needClose);\r\n } else {\r\n SaveFolderCard(needClose, true);\r\n }\r\n });\r\n}\r\n\r\nfunction rightsToSubObjectsDialog(need_close) {\r\n var rightsDialog = new WA.CMP.dialogs.MessageBox();\r\n\r\n var mainText = L('APPLY_ACCESS_RIGHTS_TEXT');\r\n var additionalText = L('APPLY_ACCESS_RIGHTS_LONG_TIME');\r\n var title = L('CONFIRMATION');\r\n\r\n rightsDialog.removeDefaultButtons();\r\n rightsDialog.addButton('ApplyReplace', L('YES'), function () {\r\n applyRights(true, need_close);\r\n });\r\n rightsDialog.addButton('ApplyNoRepalce', L('APPLY_ACCESS_RIGHTS_YES_REPLACE'), function () {\r\n applyRights(false, need_close);\r\n });\r\n rightsDialog.addButton('NoApply', L('NO'), function () { SaveFolderCard(need_close, true); });\r\n\r\n rightsDialog.show(mainText, additionalText, title, 'question');\r\n\r\n function applyRights(isNeedReplace, shouldClose) {\r\n var selectedUsers = $('input[name=__SELECTED_USERS]').val();\r\n var currentRights = $('input[name=__CURRENT_USERS_RIGHTS]').val();\r\n var wdialog = waitDialog();\r\n\r\n wdialog.show();\r\n WA.SRV.call('/Folder.asmx/ApplyRightsToFolder', {\r\n FolderID: WA.CR.ID,\r\n NewUserRights: selectedUsers,\r\n OldUserRights: currentRights,\r\n NeedReplace: isNeedReplace\r\n }).done(function (res) {\r\n wdialog.close();\r\n resultDialog(res, shouldClose);\r\n }).fail(function (res) {\r\n wdialog.close();\r\n resultDialog(res, shouldClose);\r\n });\r\n };\r\n\r\n function waitDialog() {\r\n var dialog = new WA.CMP.dialogs.BaseDialog();\r\n dialog.removeDefaultButtons();\r\n dialog.removeCloseButton();\r\n dialog.title = L('APPLY_ACCESS_RIGHTS_PROGRESS_TITLE');\r\n dialog.setHtml(format('{0}', L('PLEASE_WAIT_DONT_CLOSE_PAGE')));\r\n\r\n return dialog;\r\n };\r\n\r\n function resultDialog(res, shouldClose) {\r\n var dialog = new WA.CMP.dialogs.MessageBox();\r\n if (res) {\r\n dialog.mainText = L('APPLY_ACCESS_RIGHTS_ERROR')\r\n dialog.additionalText = res;\r\n dialog.onClose = function () {\r\n UnbindBeforeUnload();\r\n closeOrReload(shouldClose);\r\n };\r\n dialog.showError();\r\n } else {\r\n UnbindBeforeUnload();\r\n closeOrReload(shouldClose);\r\n }\r\n };\r\n\r\n function closeOrReload(shouldClose) {\r\n if (shouldClose) {\r\n CloseWindow();\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n}\r\n\r\n// Проверяет, не забрал ли пользователь полные права у себя\r\nfunction checkCurrentUserRights() {\r\n var selectedUsers = $('input[name=__SELECTED_USERS]').val();\r\n var currentRights = $('input[name=__CURRENT_USERS_RIGHTS]').val();\r\n\r\n var oldRights = parseRightsList(currentRights);\r\n var maxRights = null;\r\n var hasFullRights = false;\r\n\r\n for (var i = 0; i < oldRights.length; i++) {\r\n if (oldRights[i].id == CurrentUserID) {\r\n maxRights = oldRights[i].rightsType;\r\n break;\r\n }\r\n }\r\n\r\n if (maxRights) {\r\n var newRights = parseRightsList(selectedUsers);\r\n for (var i = 0; i < newRights.length; i++) {\r\n if (newRights[i].id == CurrentUserID) {\r\n hasFullRights = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n // Если записи с текущим ИД не найдено, значит права были выданы неявно\r\n hasFullRights = true;\r\n }\r\n\r\n return hasFullRights;\r\n}\r\n\r\nfunction parseRightsList(rights) {\r\n var result = [];\r\n\r\n var rightsArray = rights.split(';');\r\n for (var i = 0; i < rightsArray.length; i++) {\r\n var user = rightsArray[i].split('-');\r\n result.push({ id: user[0], rightsType: user[1] });\r\n }\r\n\r\n return result;\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Поиски============================================================================================================================================= */\r\nfunction DisableIsAllCheckboxNotChecked(reqname, el_query) {\r\n var tbl = $('.Search_Table:visible');\r\n // Для глобального поиска надо false, для остальных true\r\n var defaultFlag = true;\r\n if ($(\"#SrchGeneralAreaT\").length > 0 || $(\"#SrchGeneralAreaC\").length > 0 || $(\"#SrchGeneralAreaN\").length > 0\r\n || $(\"#SrchGeneralObjectE\").length > 0 || $(\"#SrchGeneralObjectW\").length > 0 || $(\"#SrchGeneralObjectF\").length > 0)\r\n defaultFlag = false;\r\n\r\n var searchAreaText = $(\"#SrchGeneralAreaT\").length > 0 ? $(\"#SrchGeneralAreaT\")[0].checked : defaultFlag;\r\n var searchAreaCard = $(\"#SrchGeneralAreaC\").length > 0 ? $(\"#SrchGeneralAreaC\")[0].checked : defaultFlag;\r\n var searchAreaName = $(\"#SrchGeneralAreaN\").length > 0 ? $(\"#SrchGeneralAreaN\")[0].checked : defaultFlag;\r\n var searchObjEDocument = $(\"#SrchGeneralObjectE\").length > 0 ? $(\"#SrchGeneralObjectE\")[0].checked : defaultFlag;\r\n var searchObjCustomWork = $(\"#SrchGeneralObjectW\").length > 0 ? $(\"#SrchGeneralObjectW\")[0].checked : defaultFlag;\r\n var searchObjFolder = $(\"#SrchGeneralObjectF\").length > 0 ? $(\"#SrchGeneralObjectF\")[0].checked : defaultFlag;\r\n var $archiveTag = $(\"#Search\").find('input[id$=SrchGeneralPseudoArchiveTag]');\r\n //var isInvalidCriteria = (searchObjFolder && !searchObjCustomWork && !searchObjEDocument) && (searchAreaText && !searchAreaCard);\r\n //if (!isInvalidCriteria)\r\n // isInvalidCriteria = (!searchObjFolder && !searchObjCustomWork && !searchObjEDocument);\r\n if (tbl.length == 0) {\r\n tbl = $('div.card');\r\n }\r\n //var el = tbl.find(el_query);\r\n var txt = tbl.find(\"input[id*=Text]\");\r\n var btn = tbl.find(\"input.Search_Btn:first\");\r\n var Warning = $(btn).prev(\"div#SrchWarnMsg\");\r\n\r\n var DisableButton = false;\r\n var DisableTextbars = false;\r\n\r\n if (!searchObjFolder && !searchObjCustomWork && !searchObjEDocument) {\r\n DisableButton = true;\r\n } else if (!searchObjFolder && !searchObjCustomWork && !searchObjEDocument && !searchAreaCard) {\r\n DisableButton = true;\r\n } else if (searchObjFolder) {\r\n DisableButton = false;\r\n }\r\n\r\n if (!searchAreaText && !searchAreaCard && !searchAreaName) {\r\n DisableTextbars = true;\r\n }\r\n // поиск папок по тексу это неверные критерии\r\n if (searchAreaText && searchObjFolder && !searchAreaName && !searchAreaCard && !searchObjCustomWork && !searchObjEDocument) {\r\n DisableButton = true;\r\n }\r\n\r\n //Отключаем элементы\r\n //if ((tbl.find('input[id*=' + reqname + ']:checked').length == 0) || (isInvalidCriteria)) {\r\n if (DisableButton) {\r\n var htmlWarning = \"
\" +\r\n \"

\" +\r\n L(\"WARN_INVALID_SEARCH_CRITERIA\") +\r\n \"

\";\r\n //Добавляем сообщение\r\n if (Warning.length == 0) $(btn).before(htmlWarning);\r\n //блокируем кнопку\r\n btn.attr(\"disabled\", true);\r\n btn.addClass('disabled');\r\n } else {\r\n //удаляем сообщение\r\n if (Warning.length > 0) Warning.remove();\r\n //снимаем блокировку с кнопки\r\n btn.removeAttr(\"disabled\");\r\n btn.removeClass('disabled');\r\n }\r\n\r\n if (DisableTextbars) {\r\n //блокируем текстовые поля\r\n txt.attr(\"disabled\", true);\r\n txt.addClass('Req_Disabled');\r\n } else {\r\n //снимаем блокировку с текстовых полей\r\n txt.removeAttr(\"disabled\");\r\n txt.removeClass('Req_Disabled');\r\n }\r\n}\r\nfunction DisableTextbox(reqname) {\r\n //DisableIsAllCheckboxNotChecked(reqname, 'input[id*=Text]');\r\n DisableIsAllCheckboxNotChecked(reqname, 'input.Search_Btn:first');\r\n}\r\nfunction DisableSearchBtn(reqname) {\r\n DisableIsAllCheckboxNotChecked(reqname, 'input.Search_Btn:first');\r\n}\r\nfunction SearchPseudoArchiveTagChanged(reqname) {\r\n DisableIsAllCheckboxNotChecked(reqname, 'input.Search_Btn:first');\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Мастера действий============================================================================================================================================= */\r\nfunction CloseBaseWizardWindow(key) {\r\n window.onunload = function () { FreeWizard(key); }\r\n}\r\n\r\nfunction FreeWizard(key) {\r\n var R;\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Wizard.asmx/FreeWizard\" + WSSParam,\r\n data: \"{'Key':'\" + key + \"'}\",\r\n async: false,\r\n success: function (res) {\r\n R = res.d;\r\n }\r\n });\r\n CheckForLoginPage(R);\r\n return R;\r\n}\r\n\r\nfunction DisableWizardButtons() {\r\n $('.wizard-form__button').addClass('disabled').attr('disabled', 'disabled');\r\n}\r\n\r\n// на этапе мастера типа запись справочника и установке автоматически открывать запись справочника - будет открываться вкладка.\r\nfunction OpenObjectInWizardStep(notAutomatically) {\r\n var jShowRefCard = $(\"#ObjectHyperlink\");\r\n\r\n // окна шагов визарда могут быть разного размера, нужно триггерить ресайз\r\n // без таймаута не сработает\r\n setTimeout(() => {\r\n $(window).trigger('resize');\r\n }, 500);\r\n\r\n if (jShowRefCard.length > 0) {\r\n if (jShowRefCard.data('hasaccess') == 'True') {\r\n if (jShowRefCard.data('autoshow') == 'True') {\r\n var id = jShowRefCard.data('id');\r\n var versionNum = jShowRefCard.data('version');\r\n var hasVersions = jShowRefCard.data('hasversions') == \"True\";\r\n\r\n if (WA.agent.isAvailable() && (typeof versionNum !== 'undefined') && ('' + versionNum !== '0') && g_defaultListAction !== \"preview\") {\r\n if (hasVersions) {\r\n var openForWrite = false;\r\n if (jShowRefCard.data('openforwrite') == \"True\") {\r\n openForWrite = true;\r\n }\r\n\r\n // Если режим открытия документа - тело\r\n var docLink = new WA.Link(id, OBJECT_TYPE.EDOCUMENT);\r\n if (jShowRefCard.data('showmode') == WIZARD_DOCUMENT_STEP_SHOW_MODE.BODY) {\r\n Core.agent.getPlugin('edmsplugin').done(function () {\r\n SendEDocToAgent(id, versionNum, openForWrite);\r\n }).fail(function () {\r\n if (notAutomatically) {\r\n docLink.open();\r\n }\r\n });\r\n }\r\n else {\r\n // Если режим открытия документа - карточка\r\n docLink.open();\r\n }\r\n }\r\n else {\r\n //отобразить сообщение что недоступна версия\r\n ConfirmDialog({ title: L(\"INFO\"), text: L(\"ERR_NO_VERSIONS_AVAILABLE\", jShowRefCard.html()), okText: L(\"OK\"), height: \"auto\", width: \"300px\", isShowCancelButton: false });\r\n }\r\n }\r\n else {\r\n jShowRefCard.click();\r\n }\r\n }\r\n }\r\n else {\r\n // Вывести сообщение об отсутствии прав\r\n ShowError(L(\"OBJECT_NOT_ACCESS_OR_CREATE\"));\r\n }\r\n }\r\n}\r\n/* =================================================================================================================================================== */\r\n\r\nvar CallService, CallServiceSync;\r\n\r\n(function () {\r\n\r\n // Функция, чтобы вызывать методы сервисов веб-доступа. Давно нужна была!\r\n // string service_method: метод сервиса, например /Session.asmx/CopyLinks\r\n // [object params]: параметры\r\n // [function callback(res)]: функция, вызываемая при успешном завершении запроса.\r\n // object res: объект, который вернул сервис.\r\n function CallServiceInternal(service_method, params, callback, error, async) {\r\n params = params || {};\r\n var error_handler = function () { if (error) error.apply(null, arguments); }\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: service_method,\r\n data: $.toJSON(params),\r\n async: async,\r\n cache: false,\r\n success: function (res) {\r\n if (!res) {\r\n error_handler();\r\n return;\r\n }\r\n res = res.d;\r\n if (CheckForLoginPage(res)) return;\r\n if (typeof callback !== \"undefined\")\r\n callback(res);\r\n },\r\n error: error_handler\r\n });\r\n }\r\n\r\n CallService = function (service_method, params, callback, error) {\r\n CallServiceInternal(service_method, params, callback, error, true);\r\n }\r\n\r\n CallServiceSync = function (service_method, params, callback, error) {\r\n CallServiceInternal(service_method, params, callback, error, false);\r\n }\r\n\r\n})();\r\n\r\n// ==========================================================================================================\r\n// Супер-функция. Обрабатывает все нажатия на все табы во всех карточках объектов (в идеале).\r\n// string tabName - название вкладки.\r\nfunction CardTabClick(tabName) {\r\n if (!WA.CR.sideBar.tabs[tabName].isSelected()) {\r\n const url = new WA.URL();\r\n const view = url.getParam('view');\r\n const changeTab = () => {\r\n ShowTopSpinner(L('PLEASE_WAIT'), false);\r\n if (page === '/reference.aspx') {\r\n UnbindBeforeUnload();\r\n }\r\n DoAction(`view=${tabName}&-op&-val&-ver&-ShowAll`, false);\r\n };\r\n\r\n if (tabName === 'Card' && $('.CardForm_Tab').length) { // мы в карточке документа, например\r\n Core.sideBar.updateTab(1);\r\n } else {\r\n var page = window.location.pathname.toLowerCase();\r\n if (page.indexOf('/doc.aspx') !== -1)\r\n ChangeTabDoc(tabName);\r\n else if (page.indexOf('/folder.aspx') !== -1)\r\n ChangeTabFolder(tabName);\r\n else if (page === '/reference.aspx' && (!view || view.toUpperCase() === 'CARD') && WA.CR.form.isChanged()){\r\n ConfirmDialogNew(L('UNSAVED_CHANGES_WILL_BE_LOST'), () => { \r\n changeTab();\r\n }); \r\n } else {\r\n changeTab();\r\n } \r\n }\r\n }\r\n}\r\n\r\nfunction leadzero(x) {\r\n return (x < 10) ? '0' + x : x;\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\nfunction ShowAllCustomWorkState() {\r\n DoAction('ShowAll=1');\r\n return false;\r\n}\r\n\r\nfunction ReloadExplorer() {\r\n WA.CR.window.reloadExplorer();\r\n}\r\n\r\nfunction PageInit() {\r\n $(function () {\r\n $(window).resize(function () { setRealHeightAndWidthOnResize(); });\r\n setRealHeightAndWidth();\r\n InitMouseEvents();\r\n InitTooltips();\r\n });\r\n jQuery().pagezoom(function () {\r\n setTimeout(function () {\r\n setRealHeightAndWidth();\r\n }, 150);\r\n });\r\n}\r\n\r\n\r\nfunction RefSel_AttachResult(inp, data, id, AfterSelectFunc, IsNeedCallFuncOnClr, leader, driven) {\r\n if (data != null) {\r\n if ($.isFunction(AfterSelectFunc)) AfterSelectFunc(data[0]);\r\n\r\n var needFillLeadAndDriven = (leader.length > 0 || driven.length > 0);\r\n if (needFillLeadAndDriven) {\r\n ClrVal(id, true, driven);\r\n g_FillLead[id] && g_FillLead[id](data[3]);\r\n g_FillDriven[id] && g_FillDriven[id]();\r\n }\r\n\r\n inp.change();\r\n } else {\r\n //вызываем функцию если поле очищено\r\n if (IsNeedCallFuncOnClr) AfterSelectFunc(null);\r\n ClrVal(id, false, driven);\r\n }\r\n}\r\n\r\nfunction RefSel_AttachMultiResult(inp, data, AfterSelectFunc) {\r\n if (AfterSelectFunc != null) AfterSelectFunc(inp, data);\r\n}\r\n\r\nvar g_GetLeadSelIDs = {};\r\nvar g_FillLead = {};\r\nvar g_FillDriven = {};\r\n\r\nfunction BindLeaderDrivenRequisites(id, leader, lookup, driven) {\r\n\r\n //Получим значения ведущих реквизитов.\r\n g_GetLeadSelIDs[id] = function () {\r\n var val = '';\r\n for (var i = 0; i < leader.length; i++) {\r\n var leaderParts = leader[i].split(\"|\");\r\n var leaderControlName = leaderParts[0];\r\n var leaderRequisiteName;\r\n if (leaderParts.length === 1) {\r\n leaderRequisiteName = '';\r\n } else {\r\n leaderRequisiteName = leaderParts[1];\r\n }\r\n\r\n val += lookup[i] + '|' + leaderRequisiteName + '=' + getValue(leaderControlName) + '&';\r\n };\r\n return val;\r\n };\r\n\r\n // Заполним ведущие реквизиты.\r\n g_FillLead[id] = function (LeadIDs) {\r\n var ht = $.parseJSON(LeadIDs);\r\n\r\n for (var i = 0; i < leader.length; i++) {\r\n var leaderData = ht[lookup[i]];\r\n var leaderControlName = leader[i].split(\"|\")[0];\r\n\r\n if (!$.isEmptyObject(leaderData)) {\r\n var inp = $('input#' + leaderControlName);\r\n if (inp.length > 0) {\r\n var rs = inp.data('ReferenceSelectInstance');\r\n var refCode = rs.getFirstRefCode();\r\n\r\n var queryContext = rs.queryContext;\r\n // Множественный выбор ссылается на несколько ревизитов, поэтому меняем контекст.\r\n if (rs.referenceCodesAndReqNamesInDetailSection && rs.referenceCodesAndReqNamesInDetailSection[refCode]) {\r\n queryContext = JSON.parse(queryContext);\r\n queryContext.requisiteNumber = rs.referenceCodesAndReqNamesInDetailSection[refCode].number;\r\n queryContext = JSON.stringify(queryContext);\r\n }\r\n\r\n var url = rs.url;\r\n var params = $.extend({\r\n q: \"\",\r\n filter: \"[ИД]=\" + leaderData[0],\r\n useadditional: rs.useadditional ? \"1\" : \"0\",\r\n disablespecialprocessing: \"1\",\r\n queryContext: queryContext\r\n }, rs.extraParams || {});\r\n\r\n rs.dataProvider.sendQuery(url, params, (function (_leaderControlName) {\r\n return function (count, res) {\r\n var data = res[0];\r\n if (data && data.leadingRequisitesValue !== \"{}\") {\r\n g_FillLead[_leaderControlName](data.leadingRequisitesValue);\r\n }\r\n };\r\n })(leaderControlName));\r\n }\r\n\r\n $('#' + leaderControlName).SetValue(leaderData).change();\r\n }\r\n };\r\n };\r\n\r\n // Вызовем функции автозаполнения у ведомых реквизитов.\r\n g_FillDriven[id] = function () {\r\n try {\r\n for (var i = 0; i < driven.length; i++) {\r\n FillDrivenIfItResultHasOneRecord(driven[i], g_GetLeadSelIDs[driven[i]]);\r\n };\r\n } catch (ex) { }\r\n };\r\n\r\n};\r\n\r\n//Очистка значений реквизитов\r\nfunction ClrVal(ID, ClrOnlyDriven, DrivenIDs) {\r\n var IDs = [];\r\n var CurentID;\r\n try {\r\n if (ClrOnlyDriven) IDs = IDs.concat(DrivenIDs);\r\n else IDs = IDs.concat(ID, DrivenIDs);\r\n for (i = 0; i < IDs.length; i++) {\r\n CurentID = IDs[i];\r\n var inp = $(\"#\" + CurentID);\r\n inp.SetValue(null).change();\r\n }\r\n } catch (ex) { }\r\n}\r\n\r\n// Получение значение реквизита\r\nfunction getValue(reqID, inp) {\r\n var v = $('#hSelID_' + reqID).val();\r\n return (typeof v == 'undefined' ? '' : v);\r\n}\r\n\r\nfunction FillDrivenIfItResultHasOneRecord(id, LeadSelIDs) {\r\n var refurl = $(\"#\" + id).attr(\"refurl\");\r\n $(\"#\" + id).Clear();\r\n $.ajax({\r\n type: \"GET\",\r\n dataType: \"text\",\r\n url: refurl + \"&LeadSelID=\" + encodeURI(LeadSelIDs()),\r\n cache: false,\r\n success: function (res) {\r\n var rows = res.split(\"\\r\\n\");\r\n if (rows.length > 0 && rows[0] != 'ERROR' && rows.length == 3) {\r\n $(\"#\" + id).SetValue(rows[1].split('|')).change();\r\n }\r\n }\r\n });\r\n}\r\n\r\n// Инициализируем подсказки для реквизита выбора из справочника.\r\nfunction RefSel_InitHint(el, RefSelID, RefCode) {\r\n var inpId = el.attr('id');\r\n el.addClass('hint').data('data-hint', { id: RefSelID, compcode: RefCode }).removeClass('hintInit').qtip('hide');\r\n\r\n function updateHintData($this, newRecID, RefCode) {\r\n if (newRecID != null && newRecID != '') {\r\n $this.data('data-hint', { id: newRecID, compcode: RefCode })\r\n $this.removeClass('hintInit').qtip('hide');\r\n InitAdditionalInfoTooltip($this);\r\n } else {\r\n $this.removeData('data-hint').removeClass('hintInit').qtip('hide').qtip('disable');\r\n }\r\n }\r\n\r\n el.bind('onSelected', function () {\r\n updateHintData($(this), $('#hSelID_' + inpId).val(), RefCode);\r\n });\r\n el.result(function (event, data) {\r\n updateHintData($(this), (data != null ? data[0] : null), RefCode);\r\n });\r\n}\r\n\r\nvar OnTabChanged = function (callback, tabName, dfmTabName) {\r\n if (tabName === 'Card') dfmTabName = 'Card';\r\n\r\n var isRun = false;\r\n var callbackRunChecker = function () {\r\n var r;\r\n if (callback) {\r\n r = callback();\r\n }\r\n isRun = true;\r\n return r;\r\n };\r\n dfmTabName = dfmTabName || '';\r\n\r\n var htmlEl = $('div.tab_item').filter('[id$=_' + tabName + ']');\r\n\r\n var result = $('html').triggerHandler('OnTabChanged', [tabName, dfmTabName, callbackRunChecker, htmlEl]);\r\n if (!isRun && (typeof result == 'undefined' || result)) {\r\n callbackRunChecker();\r\n }\r\n}\r\n\r\n/**\r\n* Преобразует специальные символы в HTML сущности\r\n* @function HTMLEncode\r\n* @global\r\n* @param {string} text\r\n* @return {string}\r\n* @deprecated\r\n*/\r\nfunction escapeHtml(text) {\r\n return ('' + text).escapeHtml();\r\n};\r\n\r\n/**\r\n* Используется в WebAccess для проверки наличия биндингов, не удаляйте пожалуйста(один раз уже пропало)\r\n* @function jQuery.hasAttr\r\n* @param {string} name\r\n* @return {boolean}\r\n*/\r\n$.fn.hasAttr = function (name) {\r\n return this.attr(name) !== undefined;\r\n};\r\n\r\n/**\r\n* Поиск объекта в массиве по атрибуту\r\n* @function getElementIndexByAttr\r\n* @global\r\n* @param {array} array массив объектов\r\n* @param {string} key атрибут по которому ищется объект\r\n* @param {string} value значение атрибута\r\n* @return {integer} индекс найденного элемента, либо -1 если не найден\r\n*/\r\nwindow.getElementIndexByAttr = function (array, key, value) {\r\n for (var i = 0, len = array.length; i < len; i++) {\r\n if (array[i][key] === value) {\r\n return i;\r\n };\r\n };\r\n return -1;\r\n};\r\n\r\n/**\r\n* Возможность перезаписи функций, с возможностью запуска родительской функции.\r\n* @global\r\n*/\r\nFunction.prototype.override = function (func) {\r\n var superFunction = this;\r\n return function () {\r\n this.superFunction = superFunction;\r\n return func.apply(this, arguments);\r\n };\r\n};\r\n\r\n// Показать модальное окно с инструкцией\r\nfunction showInstructionDialog() {\r\n WA.SRV.call(\"/Task.asmx/GetInstruction\", { \"Type\": WA.getLocation(), \"ID\": GetParamInURL(\"id\") }).success(function (result) {\r\n var dialog = new WebAccess.components.dialogs.BaseDialog();\r\n dialog.setHtml(this.Result.html);\r\n dialog.width = '600px';\r\n dialog.height = 'auto';\r\n dialog.title = this.Result.title;\r\n dialog.okText = L(\"CLOSE\");\r\n dialog.show();\r\n BindHelpIcoClickOnModalWindow('Instruction');\r\n }).error(function (error) {\r\n console.log(error);\r\n });\r\n}\r\n\r\n/**\r\n* Поиск предка для элемента\r\n*/\r\n$.fn.hasAncestor = function (a) {\r\n return this.filter(function () {\r\n return !!$(this).closest(a).length;\r\n });\r\n};\r\n\r\n/**\r\n* Стандартный метод when jquery резолвится сразу как только зафейлится первый из деферредов.\r\n* Этот метод дожидается всей пачки переданных deferred-объектов и только тогда вызывается done или fail;\r\n*/\r\n$.whenAllDone = function () {\r\n var deferreds = [];\r\n var result = $.Deferred();\r\n\r\n $.each(arguments, function (i, current) {\r\n var currentDeferred = $.Deferred();\r\n current.then(function () {\r\n currentDeferred.resolve(false, arguments);\r\n }, function () {\r\n currentDeferred.resolve(true, arguments);\r\n });\r\n deferreds.push(currentDeferred);\r\n });\r\n\r\n $.when.apply($, deferreds).then(function () {\r\n var failures = [];\r\n var successes = [];\r\n\r\n $.each(arguments, function (i, args) {\r\n // If we resolved with `true` as the first parameter\r\n // we have a failure, a success otherwise\r\n var target = args[0] ? failures : successes;\r\n var data = args[1];\r\n // Push either all arguments or the only one\r\n target.push(data && data.length === 1 ? data[0] : args);\r\n });\r\n\r\n if (failures.length) {\r\n return result.reject.apply(result, failures);\r\n }\r\n\r\n return result.resolve.apply(result, successes);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n* Способ для определения того,\r\n* что браузер был перезапущен для браузеров которые не грохают сессионные куки\r\n* @see #93027\r\n*/\r\n(function emulateSession() {\r\n var cookieName = 'fakeSession';\r\n var sessionId = new Date().getTime();\r\n var keepAliveLoop = null;\r\n\r\n var getSession = function () {\r\n return $.cookie(cookieName);\r\n }\r\n\r\n var setSession = function () {\r\n var options = { expires: new Date((new Date).getTime() + 5 * 1000) };\r\n $.cookie(cookieName, sessionId, options);\r\n };\r\n\r\n var runSession = function () {\r\n var me = this;\r\n var seconds = 2 * 1000;\r\n var keepAlive = function () {\r\n\r\n if (getSession()) setSession();\r\n else if (WA.getLocation() !== 'login') {\r\n window.browserSessionIsRestored = true;\r\n }\r\n };\r\n\r\n if (!keepAliveLoop) keepAliveLoop = setInterval(keepAlive, seconds);\r\n keepAlive();\r\n };\r\n\r\n if (WA.getLocation() === 'login') setSession();\r\n\r\n else setTimeout(function () {\r\n window.browserSessionIsRestored = false;\r\n setSession();\r\n }, 100);\r\n\r\n runSession();\r\n})();\r\n\r\n/* DEPRECATED */\r\n(function () {\r\n window._isDarkTheme = function () {\r\n return false;\r\n };\r\n\r\n window._prefixIfDark = function () {\r\n return '';\r\n };\r\n})();\r\n","/**\r\n * Предоставляет инструменты для работы со ссылками. Например, скопировать ссылки в буфер обмена.\r\n *\r\n * @namespace window\r\n * @since 5.4.0.1000\r\n */\r\n(function (global) {\r\n /**\r\n * Запомнить в кэше источник ссылок.\r\n *\r\n * @method window#setLinksSource\r\n * @param {string} sourceId ИД ресурса.\r\n * @param {string} sourceType Тип ресурса.\r\n */\r\n global.setLinksSource = (sourceId, sourceType) => {\r\n WA.cache.setItem('sourceID', sourceId);\r\n WA.cache.setItem('sourceType', sourceType);\r\n }\r\n\r\n /**\r\n * Скопировать cсылки в буфер.\r\n *\r\n * @method window#CopyLinks\r\n * @param {object} [contextMenuCopyObj] Объект, для которого было вызвано контекстное меню\r\n */\r\n global.CopyLinks = (contextMenuCopyObj) => {\r\n setLinksSource(null, null);\r\n\r\n ShowTopSpinner();\r\n let links = getSelectedLinks(contextMenuCopyObj);\r\n\r\n Core.clipboard.copyLinksToClipboard(links).done((copiedLinksCount) => {\r\n HideTopSpinner(L('COPIED_LINKS', copiedLinksCount), 2000);\r\n }).fail((completeMsg) => {\r\n HideTopSpinner(completeMsg, 2000);\r\n });\r\n }\r\n\r\n /**\r\n * Вырезать ссылки.\r\n *\r\n * @method window#CutLinks\r\n * @param {object} [contextMenuCopyObj] Объект, для которого было вызвано контекстное меню\r\n */\r\n global.CutLinks = (contextMenuCopyObj) => {\r\n ShowTopSpinner();\r\n\r\n let folderId = getCurrentFolderId();\r\n\r\n //если находимся не в папке, то вместо вырезания просто копируем\r\n if (folderId === null) {\r\n setLinksSource(null, null);\r\n } else {\r\n setLinksSource(folderId, 'F');\r\n }\r\n\r\n let links = getSelectedLinks(contextMenuCopyObj);\r\n\r\n Core.clipboard.copyLinksToClipboard(links).done((copiedLinksCount) => {\r\n HideTopSpinner(L('CUT_LINKS', copiedLinksCount), 2000);\r\n }).fail((completeMsg) => {\r\n HideTopSpinner(completeMsg, 2000);\r\n });\r\n }\r\n\r\n /**\r\n * Возвращает массив ссылок, которые отмечены как выбранные.\r\n *\r\n * @param {object} [contextMenuObj] объект из которого было вызвано контекстное меню\r\n * @return {Array} массив ссылок вида {ID:..., Type:..., CompCode:..., Description}\r\n */\r\n function getSelectedLinks(contextMenuObj) {\r\n let links = [];\r\n\r\n if (!!contextMenuObj) {\r\n // если мы в проводнике или справочнике, значит происходит копирование через контекстное меню\r\n if (WA.getLocation() === 'explorer' || WA.getLocation() === 'referencerecords') {\r\n links = takeLinkFromContextMenu(contextMenuObj);\r\n } else {\r\n //иначе мы в карточке Документа/ЗЗУ/Записи справочника\r\n links = takeLinkFromCard(contextMenuObj, WA.getLocation() === 'documentpreview');\r\n }\r\n\r\n } else {\r\n // выделены все объекты\r\n if (isAllRecordsInFolderSelected()) {\r\n const jObjectContents = $('.object_contents.auto_load');\r\n if (jObjectContents.length) {\r\n let componentName = jObjectContents.data('component')\r\n if (componentName === 'FolderContents' || componentName === 'SearchContents') {\r\n let params = {\r\n UserFilterText: WA.CR.objectList.getLikeFilter(),\r\n UserFilterRequisites: WA.CR.objectList.getlikeFilterRequisites(),\r\n };\r\n let serviceUrl;\r\n if (componentName === 'FolderContents'){ \r\n serviceUrl = '/Folder.asmx/ContentAsHRefs'\r\n const folderId = GetParamInURL('ID', location.href);\r\n params.FolderID = folderId; \r\n params.PredefinedFilter = WA.CR.objectList.getPredefinedFilter();\r\n \r\n } else {\r\n serviceUrl = '/Session.asmx/GetSearchContentLinks';\r\n let url = new WA.URL(); \r\n params.SearchName = url.getParam('searchname') ;\r\n params.SearchID = jObjectContents.data('uid') || ''; \r\n params.Mode = url.getParam('mode'); \r\n params.ObjectType = url.getParam('objtype'); \r\n }\r\n CallServiceSync(\r\n serviceUrl,\r\n params,\r\n (res) => {\r\n links = _takeLinksFromServiceResponse(res); \r\n }\r\n );\r\n } \r\n }\r\n }\r\n //если список пустой, добавим выделенные\r\n if (!links.length) {\r\n links = takeLinksFromPage();\r\n }\r\n }\r\n return links;\r\n }\r\n\r\n /**\r\n * Получает ссылки, которые вернул веб-сервис и исключает из них невыбранные.\r\n *\r\n * @method _takeLinksFromServiceResponse\r\n * @private\r\n * @since 5.6.0\r\n */\r\n function _takeLinksFromServiceResponse(res) {\r\n let links = [];\r\n if (res.Success) {\r\n let hyperlinks = res.Result;\r\n let unselectedLinks = WA.CR.objectList.getUnselectedItems();\r\n let isUnselected = (link) => { \r\n return unselectedLinks.some((unselectedLink) => {\r\n let id = +unselectedLink.id; \r\n return (unselectedLink.kind === convertTypeToKind(link.Type) && link.ID === id);\r\n })\r\n }\r\n hyperlinks.forEach((hyperlink) => { \r\n let link = {\r\n Type: hyperlink.Type,\r\n ID: hyperlink.ID,\r\n CompCode: hyperlink.ReferenceName || '',\r\n Description: hyperlink.Description,\r\n }; \r\n // Исключим невыбранные ссылки \r\n if (!unselectedLinks.length || !isUnselected(link)) {\r\n links.push(link);\r\n } \r\n }) \r\n return links;\r\n } else {\r\n HideTopSpinner(L('ERROR_MSG', res.Error), 5000);\r\n return links;\r\n }\r\n }\r\n \r\n /**\r\n * Получает ссылку из объекта карточки.\r\n *\r\n * @param {any} cardObj объект карточки. Может быть как основным объектом карточки, так и вложением.\r\n * @param {boolean} opt_isGettingNameFromObj признак, что наименование необходимо брать из карточки объекта\r\n * @return {object} ссылка в формате для агента вида {ID:..., Type:..., CompCode:..., Description}\r\n */\r\n function takeLinkFromCard(cardObj, opt_isGettingNameFromObj) {\r\n //Тут нужно понять, мы копируем сам объект карточки или его вложение\r\n //Объект с вложением имеет tr, так мы его и опознаем\r\n // Кроме предпросмотра, в котором объект тоже имеет tr, поэтому добавлен доп. параметр opt_isGettingNameFromObj\r\n return [\r\n {\r\n ID: cardObj.id,\r\n Type: cardObj.type[0],\r\n CompCode: !!cardObj.refcode ? cardObj.refcode : '',\r\n Description: ((cardObj.tr && !opt_isGettingNameFromObj) ? cardObj.tr.find('div.objectname').text() : getCardObjectName()).unescapeHtml()\r\n }\r\n ];\r\n }\r\n\r\n function getCardObjectName() {\r\n switch (WebAccess.getLocation()) {\r\n case 'job': return WebAccess.Job.Subject;\r\n case 'task': return WebAccess.Task.Subject;\r\n case 'doc':\r\n case 'documentpreview': return WA.Document.Name;\r\n case 'reference': return `${WebAccess.ReferenceRecord.ReferenceCaption}: ${WebAccess.ReferenceRecord.Name}`;\r\n default: return '';\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает ссылку при копировании через контекстное меню\r\n *\r\n * @param {any} contextMenuCopyObj объект, для которого было вызвано контекстное меню\r\n * @return {object} ссылка на объект в формате для агента вида {ID:..., Type:..., CompCode:..., Description}\r\n */\r\n function takeLinkFromContextMenu(contextMenuCopyObj) {\r\n let selected = [];\r\n let items = WA.CR.objectList.getItems();\r\n selected.push(items[contextMenuCopyObj.id]);\r\n //если контекстное меню вызвано у папки из дерева папок\r\n if (selected.length === 1 && typeof selected[0] === 'undefined') {\r\n selected[0] = contextMenuCopyObj;\r\n // Если элемент из DOM, то берем имя прямо со страницы, иначе передан узел дерева, и берем информацию из него.\r\n if (contextMenuCopyObj instanceof jQuery || contextMenuCopyObj instanceof HTMLElement || contextMenuCopyObj.type === 'CurrentFolder') {\r\n selected[0].name = contextMenuCopyObj.tr.find('.current-folder__name').text();\r\n } else {\r\n if (contextMenuCopyObj.node) {\r\n selected[0].name = contextMenuCopyObj.node.caption;\r\n }\r\n }\r\n }\r\n return makeLinksFromItems(selected);\r\n }\r\n\r\n /**\r\n * Возвращает ссылки помеченные как выбранные с текущей страницы\r\n *\r\n * @return {Array} Массив ссылок вида {ID:..., Type:..., CompCode:..., Description}\r\n */\r\n function takeLinksFromPage() {\r\n let selected = WA.CR.objectList.getSelectedItems();\r\n return makeLinksFromItems(selected);\r\n }\r\n\r\n /**\r\n * Конвертирует API-ссылки в формат для агента.\r\n *\r\n * @param {Array} items Массив ссылок вида {id:..., kind:..., referenceName:..., name:...}\r\n * @return {Array} Массив ссылок вида {ID:..., Type:..., CompCode:..., Description}\r\n */\r\n function makeLinksFromItems(items) {\r\n let links = items.map((item) => {\r\n let desc = item.name;\r\n if (item.referenceName && WA.getLocation() === 'referencerecords') {\r\n // Небольшая оптимизация, т.к. для получения описания записи справочника отправляется запрос на сервер, а если выделить много объектов, то будет тормоза и большая нагрузка.\r\n let refCaption = $('.card-header__label').data('captioned');\r\n desc = `${refCaption}: ${item.name}`;\r\n }\r\n return {\r\n ID: item.id,\r\n Type: item.kind[0].toUpperCase(),\r\n CompCode: item.referenceName || '',\r\n Description: desc,\r\n };\r\n });\r\n return links;\r\n }\r\n\r\n /**\r\n * Конвертирует тип объекта к виду \r\n * \r\n * @param {string} type Тип объекта\r\n * @returns {string} Вид объекта\r\n */\r\n function convertTypeToKind(type) {\r\n switch (type.toUpperCase()) {\r\n case 'E': return 'EDOC';\r\n case 'F': return 'FOL';\r\n case 'J': return 'JOB';\r\n case 'T': return 'TASK';\r\n case 'R': return 'REF';\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Конвертирует ссылки из формата агента в Models.Link\r\n *\r\n * @param {Array} links массив ссылок вида {ID:..., Type:..., CompCode:..., Description:...}}\r\n * @returns {Array} массив ссылок вида {ID:..., Kind:..., CompCode:..., Desc:...}}\r\n */\r\n global.convertAgentLinksToLinkModels = (links) => {\r\n let convertedLinks = [];\r\n links.forEach((link) => { \r\n convertedLinks.push({\r\n Kind: convertTypeToKind(link.Type[0]),\r\n ID: link.ID,\r\n CompCode: link.CompCode,\r\n Desc: link.Description,\r\n });\r\n });\r\n return convertedLinks;\r\n }\r\n\r\n /**\r\n * Переводит ссылки из формата Models.Link в формат агента\r\n *\r\n * @param {Array} links массив ссылок вида {ID:..., Kind:..., CompCode:..., Desc:...}}\r\n * @returns {Array} массив ссылок вида {ID:..., Type:..., CompCode:..., Description:...}}\r\n */\r\n global.convertLinkModelsToAgentLinks = (linkModels) => {\r\n let convertedLinks = [];\r\n linkModels.forEach((linkModel) => { \r\n convertedLinks.push({\r\n Type: linkModel.Kind[0],\r\n ID: linkModel.ID,\r\n CompCode: linkModel.CompCode,\r\n Description: linkModel.Desc,\r\n });\r\n });\r\n return convertedLinks;\r\n }\r\n\r\n function getCurrentFolderId() {\r\n if (WebAccess.getLocation() === 'explorer' && GetParamInURL('mode') === '') {\r\n return GetParamInURL('id');\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Возвращает признак выделены ли все объекты или нет.\r\n *\r\n * @method window#isAllRecordsInFolderSelected\r\n * @return {boolean}\r\n */\r\n global.isAllRecordsInFolderSelected = () => {\r\n return WA.ObjectListInit.state() === 'resolved' && !!WA.CR.objectList && WA.CR.objectList.isAllItemsSelected();\r\n }\r\n\r\n /**\r\n * Вставить cсылки из буфера.\r\n *\r\n * @method window#PasteLinks\r\n * @param destType: Тип приемника ссылок.\r\n * @param destId: Приемник ссылок.\r\n * @param callback: Функция обратного вызова для обработанной ссылки.\r\n */\r\n global.PasteLinks = (destType, destId, callback) => { \r\n if (g_ViewOnlyMsg) {\r\n ShowTopSpinnerResult(g_ViewOnlyMsg, 2000);\r\n return;\r\n }\r\n\r\n if (typeof callback === 'undefined') {\r\n ShowTopSpinner(L('PASTE_LINKS'));\r\n } \r\n destType = destType || 'FOLDER'; \r\n destId = destId || getCurrentFolderId();\r\n \r\n let source = {\r\n SourceID: WA.cache.getItem('sourceID'),\r\n SourceType: WA.cache.getItem('sourceType'),\r\n };\r\n\r\n WebAccess.agent.isPluginAvailable('Clipboard').always((isAvailableResponse) => {\r\n if (isAvailableResponse) {\r\n WebAccess.agent.clipboard.getLinksFromClipboard().done((links) => {\r\n if (links.length && typeof links !== 'string') {\r\n //Вставляем ссылки в папку\r\n switch (destType) {\r\n case 'FOLDER': \r\n pasteLinksToFolder(destId, links, source, callback); \r\n break;\r\n case 'EDOCUMENT': \r\n pasteLinksToBoundDocuments(destId, links, callback); \r\n break;\r\n }\r\n }\r\n else {\r\n HideTopSpinner();\r\n }\r\n }).fail(() => {\r\n pasteLinksDefault(destId, destType, source.SourceID, callback);\r\n });\r\n } else {\r\n pasteLinksDefault(destId, destType, source.SourceID, callback);\r\n }\r\n setLinksSource(null, null);\r\n });\r\n }\r\n\r\n /**\r\n * Вставить ссылки в папку.\r\n *\r\n * @function pasteLinksToFolder\r\n * @param {number} destId ИД папки назначения.\r\n * @param {Array} links Массив ссылок для вставки.\r\n * @param {Object} [source] Ссылка на источник, откуда были скопированы ссылки.\r\n * @param {function} callback Функция обратного вызова.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n function pasteLinksToFolder(destId, links, source, callback) {\r\n CallService('/Folder.asmx/AddLinks', { FolderID: destId, Links: links }, (res) => {\r\n if (res.Success) {\r\n let d = $.Deferred();\r\n //Если успешно вставили, то удаляем ссылки из источника\r\n if ((source != null) && (source.SourceID != null) && source.SourceID != WA.current.getID() && source.SourceType === 'F') {\r\n let params = {\r\n FolderID: source.SourceID, \r\n Links: links,\r\n };\r\n d = WA.SRV.call('/Folder.asmx/RemoveLinks', params);\r\n } else {\r\n d.resolve();\r\n }\r\n\r\n d.always(() => {\r\n if (!CheckForLoginPage(res)) {\r\n if (res.Result != 0) {\r\n if (typeof callback !== 'undefined') {\r\n EnableOrDisableCheckAll();\r\n callback();\r\n } else {\r\n // Обновить список и дерево\r\n WA.CR.objectList.reload().always(() => {\r\n EnableOrDisableCheckAll();\r\n });\r\n WA.CR.folderTree.updateByFolderID(destId);\r\n HideTopSpinner(L('PASTED_LINKS', res.Result), 2000);\r\n }\r\n } else {\r\n if (typeof callback === 'undefined')\r\n HideTopSpinner(L('NOT_LINKS_TO_PASTE'), 2000);\r\n }\r\n }\r\n });\r\n } else {\r\n HideTopSpinner(L('ERROR_MSG', res.Error), 5000);\r\n }\r\n });\r\n }\r\n\r\n function pasteLinksToBoundDocuments(DocID, links, callback) {\r\n let params = {\r\n EDocID: DocID, \r\n Links: links,\r\n };\r\n CallService('/EDocument.asmx/PasteLinksToBoundObjects', params, (res) => {\r\n if (res.Success) {\r\n if (!CheckForLoginPage(res)) {\r\n if (res.Result) {\r\n EnableOrDisableCheckAll();\r\n if(callback instanceof Function) {\r\n callback();\r\n } else {\r\n $('form:first').submit();\r\n } \r\n } else {\r\n if (typeof callback === 'undefined') {\r\n HideTopSpinner(L('NOT_LINKS_TO_PASTE'), 2000);\r\n } \r\n }\r\n }\r\n } else {\r\n HideTopSpinner(L('ERROR_MSG', res.Error), 5000);\r\n }\r\n });\r\n }\r\n\r\n function pasteLinksDefault(DestID, DestType, SourceID, callback) {\r\n let params = { \r\n DestID: DestID, \r\n DestType: DestType, \r\n SourceID: SourceID,\r\n };\r\n CallService('/Session.asmx/PasteLinks', params, (res) => {\r\n if (!CheckForLoginPage(res)) {\r\n if (res.Result != 0) {\r\n EnableOrDisableCheckAll();\r\n if (typeof callback != 'undefined')\r\n callback();\r\n else {\r\n if (DestType === 'FOLDER') {\r\n // Обновить список и дерево\r\n WA.CR.objectList.reload().always(() => {\r\n EnableOrDisableCheckAll();\r\n });\r\n WA.CR.folderTree.updateByFolderID(DestID);\r\n HideTopSpinner(L('PASTED_LINKS', res.Result), 2000);\r\n } else\r\n $('form:first').submit();\r\n }\r\n } else {\r\n if (typeof callback === 'undefined')\r\n HideTopSpinner(L('NOT_LINKS_TO_PASTE'), 2000);\r\n };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Удалить cсылки\r\n *\r\n * @method window#DeleteLinks\r\n * @param {object} extraParams: Дополнительные параметры.\r\n * @param {array} links: Ссылки.\r\n * @param {boolean} [needSubmit = false]\r\n * @param {number} [sourceId = ''] ИД источника ссылок.\r\n * @param {boolean} [needConfirmDeleting = true] Признак необходимости подтверждения удаления.\r\n * @param {function} afterDeleteCallback: Функция обратного вызова для удаленной ссылки.\r\n * @param {boolean} isFromTree: Признак принадлежности дереву.\r\n */\r\n global.DeleteLinks = (extraParams, links, needSubmit = false, sourceId = '', needConfirmDeleting = true, afterDeleteCallback, isFromTree) => {\r\n if (!isFromTree && g_ViewOnlyMsg != '') {\r\n ShowTopSpinnerResult(g_ViewOnlyMsg, 2000);\r\n } else { \r\n if (extraParams === null) extraParams = '';\r\n let linksToDelete = [];\r\n\r\n let deleteAll = isAllRecordsInFolderSelected();\r\n if (!deleteAll) { \r\n linksToDelete = links ||GetSelectedID().links; \r\n } else {\r\n linksToDelete = [{ \r\n ID: 0, \r\n Kind: 'ALL',\r\n }];\r\n }\r\n\r\n function getSourceType() {\r\n let src = WA.getLocation();\r\n switch (src) {\r\n case 'explorer':\r\n return 'FOLDER';\r\n case 'doc':\r\n return 'EDOCUMENT';\r\n case 'job':\r\n return 'JOB';\r\n case 'task':\r\n return 'TASK';\r\n default:\r\n return 'FOLDER';\r\n }\r\n }\r\n\r\n function callDeleteLinksService() {\r\n ShowTopSpinner(L('DELETE_LINKS'));\r\n let params = {\r\n Links: linksToDelete,\r\n SourceID: (sourceId || GetParamInURL('id')),\r\n SourceType: getSourceType(),\r\n UserFilterText: WA.CR.objectList.getLikeFilter(),\r\n UserFilterRequisites: WA.CR.objectList.getlikeFilterRequisites(),\r\n PredefinedFilter: WA.CR.objectList.getPredefinedFilter(),\r\n UnselectedLinks: WA.CR.objectList.getUnselectedItems(),\r\n };\r\n CallService('/Session.asmx/DeleteLinksWithFilter', params, (res) => {\r\n if (res.Success) {\r\n res = res.Result;\r\n if (res) {\r\n if (getSourceType() === 'FOLDER') {\r\n WA.CR.objectList.reload().done(() => {\r\n if (WA.CR.folderTree) {\r\n WA.CR.folderTree.updateNodesWithFolder(WA.CR.getID());\r\n } \r\n });\r\n updateChkAll($('div.object_contents'), $('#chkAll'));\r\n UpdateCopyPasteIcons();\r\n HideTopSpinner(L('DELETED_LINKS', res), 2000);\r\n EnableOrDisableCheckAll();\r\n } else {\r\n $('form:first').submit();\r\n }\r\n if ($.isFunction(afterDeleteCallback)) {\r\n afterDeleteCallback();\r\n }\r\n } else {\r\n if (!needSubmit) {\r\n HideTopSpinner(L('NO_RIGHT_DELETE_LINKS'), 2000);\r\n }\r\n }\r\n } else {\r\n HideTopSpinner(res.Error, 2000);\r\n }\r\n });\r\n }\r\n\r\n if (linksToDelete.length) { \r\n if (needConfirmDeleting) {\r\n ConfirmDelete(deleteAll ? GetRowsCount() : linksToDelete.length).done(() => {\r\n callDeleteLinksService();\r\n });\r\n }\r\n else {\r\n callDeleteLinksService();\r\n }\r\n }\r\n else {\r\n ShowTopSpinnerResult(L('OBJECTS_NOT_SELECTED'), 2000);\r\n }\r\n }\r\n }\r\n })(window);\r\n","//Список рекомендуемых действий для локальных копий.\r\nvar LocalCopyRecommendedAction = {};\r\n\r\n/*Обработчики действий над локальными копиями*/\r\n\r\nfunction ReturnLocalCopyCM(obj) {\r\n var item = obj.tr;\r\n var version = item.attr('version');\r\n var encoding = item.attr('encoding');\r\n var pluginName = item.attr('encpluginname');\r\n ReturnLocalCopy(obj.id, version, !!encoding ? encoding : '', !!pluginName ? pluginName : '');\r\n}\r\n\r\n//Вернуть локальную копию\r\nfunction ReturnLocalCopy(documentID, versionNumber, encodingType, pluginName, fileName, editDate) {\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n var OnConfirmRecoverLocalCopy = function (dialog, additionalParams) {\r\n var params = { \"DocumentID\": documentID, \"Version\": versionNumber, \"EncodeType\": encodingType, \"EncryptionPluginName\": pluginName };\r\n\r\n if (!!additionalParams) $.extend(params, additionalParams);\r\n\r\n _returnLocalCopyRequest(params, function (result) {\r\n var resultMessage = L('RECOVER_FROM_LOCAL_COPY_SUCCESS');\r\n ShowTopSpinnerResult(resultMessage);\r\n RemoveItemFromRecoveryList(documentID, versionNumber);\r\n }, function (err) {\r\n var resultMessage = \"\";\r\n try {\r\n resultMessage = err.message;\r\n } catch (e) {\r\n resultMessage = L('RECOVER_FROM_LOCAL_COPY_FAIL');\r\n }\r\n ShowError(resultMessage);\r\n });\r\n }\r\n var modifyDate = formatDateTime(new Date(editDate ? editDate : GetLastEditDate(documentID, versionNumber)));\r\n var confirm = (format(L(\"CONFIRM_RECOVER_FROM_LOCAL_COPY\"), { 0: versionNumber, 1: (fileName ? fileName : GetDocumentFileName(documentID)) })).escapeHtml();\r\n var warning = LocalCopyRecommendedAction[(documentID + 'v' + versionNumber)] == 'RECOVER' ? \"\" : (format(L(\"MSG_DELETE_COPY\"), { 0: modifyDate })).escapeHtml();\r\n ShowDocumentRecoveryConfirmation(confirm, warning, function (dialog) {\r\n if (GetDocumentEncodingType(documentID) >= 2) {\r\n RequestPasswordForDecryption(null, function (pass) { OnConfirmRecoverLocalCopy(dialog, { Password: pass }); });\r\n return;\r\n }\r\n OnConfirmRecoverLocalCopy(dialog, null);\r\n });\r\n });\r\n}\r\n\r\n// Возврат документа, открытого в агенте.\r\nfunction ReturnDocument(documentID, versionNumber, encodingType, pluginName, fileName, editDate) {\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n var OnConfirmRecoverLocalCopy = function (additionalParams) {\r\n var params = { \"DocumentID\": documentID, \"Version\": versionNumber, \"EncodeType\": encodingType, \"EncryptionPluginName\": pluginName };\r\n if (!!additionalParams) $.extend(params, additionalParams);\r\n _returnLocalCopyRequest(params, function (result) {\r\n var resultMessage = L('AGENT_RETURN_DOCUMENT_SUCCESS');\r\n ShowTopSpinnerResult(resultMessage);\r\n RemoveItemFromRecoveryList(documentID, versionNumber);\r\n }, function (err) {\r\n var resultMessage = \"\";\r\n try {\r\n resultMessage = err.message;\r\n } catch (e) {\r\n resultMessage = L('AGENT_RETURN_DOCUMENT_FAIL');\r\n }\r\n ShowError(resultMessage);\r\n });\r\n }\r\n\r\n if (GetDocumentEncodingType(documentID) >= 2) {\r\n RequestPasswordForDecryption(null, function (pass) { OnConfirmRecoverLocalCopy({ Password: pass }); });\r\n return;\r\n }\r\n OnConfirmRecoverLocalCopy(null);\r\n });\r\n}\r\n\r\n// Запрос на возврат документа из локальной копии.\r\nfunction _returnLocalCopyRequest(params, successCallback, errCallback) {\r\n RequestToken(TOKEN_OPERATION.UPLOAD_DOCUMENT_BODY | TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n $.extend(params, { \"Token\": token });\r\n\r\n Core.agent.invoke(\"ReturnLocalCopy\", \"edmsplugin\", params).done(function (result) {\r\n successCallback(result);\r\n }).fail(function(result) {\r\n errCallback(result);\r\n });\r\n\r\n }, params['DocumentID'], params['Version']);\r\n}\r\n\r\nfunction getDocumentListItem(docID) {\r\n return $('.List')\r\n .filter('[mode=OpenedDocs], [mode=EDocRestore]')\r\n .filter('#' + docID);\r\n}\r\n\r\nfunction GetDocumentFileName(DocID) {\r\n var item = getDocumentListItem(DocID);\r\n var ext = item.find('svg.Icon32>use').attr('alt');\r\n var name = item.find('div.objectname').contents()[0];\r\n return (!!name.textContent ? name.textContent : name.nodeValue) + '.' + ext;\r\n}\r\n\r\nfunction GetLastEditDate(DocID, VersionNumber) {\r\n var date = getDocumentListItem(DocID)\r\n .filter('[version=' + VersionNumber + ']')\r\n .attr('localeditdate');\r\n return !!date ? date : \"\";\r\n}\r\n\r\nfunction GetDocumentEncodingType(DocID) {\r\n return getDocumentListItem(DocID).attr('encoding');\r\n}\r\n\r\nfunction GetEncodingPluginName(DocID) {\r\n return getDocumentListItem(DocID).attr('encpluginname');\r\n}\r\n\r\nfunction ShowDocumentRecoveryConfirmation(message, warning, onConfirm) {\r\n var dialog = new WA.components.dialogs.MessageBox();\r\n dialog.width = 600;\r\n dialog.okText = L(\"RESTORE\");\r\n dialog.okCancelButtons(function () {\r\n dialog.disableButton(\"modal_ok_button\");\r\n dialog.disableButton(\"modal_cancel_button\");\r\n $('.ui-dialog-titlebar-close:visible', dialog._jDialog.parent()).remove();\r\n dialog._jDialog.find('.upper-area').hide().next().children().show();\r\n if (onConfirm) onConfirm(dialog);\r\n }, null);\r\n dialog.showQuestion(message, warning + GetConfirmRecoveryDlgHtml());\r\n}\r\n\r\nfunction ShowDocumentDeleteCopyConfirmation(message, warning, onConfirm) {\r\n var dialog = new WA.components.dialogs.MessageBox();\r\n dialog.width = 600;\r\n dialog.yesNoButtons(onConfirm, null);\r\n dialog.showQuestion(message, warning);\r\n}\r\n\r\nfunction GetConfirmRecoveryDlgHtml() {\r\n var html = '';\r\n var spinnerImage = 'spinner.gif';\r\n var spinnerHtml = $('')[0].outerHTML;\r\n var recoveryProcMsg = $('').html(L('DOCUMENT_RECOVER_PROCESS'))[0].outerHTML;\r\n html += $('
').html(spinnerHtml + recoveryProcMsg).attr('id', 'recovery_spinner').hide()[0].outerHTML;\r\n return html;\r\n}\r\n\r\nfunction OpenLocalCopyCM(obj) {\r\n OpenLocalCopy(obj.id, obj.tr.attr('version'));\r\n}\r\n\r\n//Открыть локальную копию\r\nfunction OpenLocalCopy(documentID, versionNumber) {\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n var params = { \"DocumentID\": documentID, \"Version\": versionNumber };\r\n plugin.invoke(\"OpenLocalCopy\", params).fail(function (result) {\r\n try {\r\n var resultMessage = result.message;\r\n ShowMessage(resultMessage, L('INFO'));\r\n } catch (e) { }\r\n });\r\n });\r\n}\r\n\r\nfunction DeleteLocalCopyCM(obj) {\r\n DeleteLocalCopy(obj.id, obj.tr.attr('version'));\r\n}\r\n\r\n//Удалить локальную копию\r\nfunction DeleteLocalCopy(documentID, versionNumber, OnDeleteCallback, SilentMode) {\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n var OnConfirmDeleteLocalCopy = function () {\r\n var resultMessage = \"\";\r\n RequestToken(TOKEN_OPERATION.UNLOCK_VERSION, function (token) {\r\n var params = { \"DocumentID\": documentID, \"Version\": versionNumber, \"Token\": token };\r\n WebAccess.agent.transmitRequest(\"DeleteLocalCopy\", \"edmsplugin\", params).done(function (result) {\r\n resultMessage = L('LOCAL_COPY_DELETE_SUCCESS');\r\n updateOpenedDocumentsWidget();\r\n if (!SilentMode) {\r\n ShowTopSpinnerResult(resultMessage);\r\n }\r\n RemoveItemFromRecoveryList(documentID, versionNumber);\r\n if (OnDeleteCallback) OnDeleteCallback();\r\n }).fail(function (result) {\r\n try {\r\n resultMessage = result.message;\r\n } catch (e) {\r\n resultMessage = L('LOCAL_COPY_DELETE_FAIL');\r\n }\r\n\r\n if (!SilentMode) ShowError(resultMessage);\r\n });\r\n }, documentID, versionNumber);\r\n }\r\n\r\n if (SilentMode) {\r\n OnConfirmDeleteLocalCopy();\r\n } else {\r\n var confirm = L(\"CONFIRM_DELETE_LOCAL_COPY\");\r\n var warning = LocalCopyRecommendedAction[(documentID + 'v' + versionNumber)] == 'DELETE' ? \"\" : L(\"MSG_RECOVERY_FROM_COPY\");\r\n ShowDocumentDeleteCopyConfirmation(confirm, warning, OnConfirmDeleteLocalCopy);\r\n }\r\n });\r\n}\r\n\r\n// Показать окно для обработки локальных копий.\r\nfunction ShowLocalCopiesWindow(localCopies) {\r\n CallService(\"/ModalWindow.asmx/Create\", { ControlName: \"LocalCopiesProcess\", Params: $.toJSON({ Documents: localCopies }) }, function (res) {\r\n if (res.Success) {\r\n var content = $(res.Result.html);\r\n if (content.children().length > 0) {\r\n var instruction = MakeInfoMessage(L(localCopies.length == 1 ? 'LOCAL_COPY_RECOVERY_INSTRUCTION' : 'LOCAL_COPIES_RECOVERY_INSTRUCTION'))[0].outerHTML;\r\n var dialog = new WebAccess.components.dialogs.BaseDialog({ wordWrap: false, maxHeight: 400 });\r\n dialog.title = L(\"EDOCUMENT_LOCAL_COPIES\");\r\n dialog.setHtml(instruction + $('
').css('overflow-y', 'auto').css('overflow-x', 'hidden').css('position', 'relative').css('max-height', 400).html(content)[0].outerHTML);\r\n dialog.isShowOkButton = false;\r\n dialog.cancelText = L('CLOSE');\r\n dialog.isShowCancelButton = true;\r\n dialog.width = 630;\r\n dialog.show();\r\n BindHelpIcoClickOnModalWindow('RestoreDocuments', $('#dialog_content_' + dialog.id).parents('.ui-dialog'));\r\n }\r\n if (res.Result.initJs) {\r\n var f = new Function(res.Result.initJs);\r\n setTimeout(function () {\r\n f.apply(window);\r\n }, 10);\r\n }\r\n } else {\r\n if (res.Error == \"NO_DOCS\") { console.log('no local copies'); }\r\n }\r\n HideTopSpinner();\r\n });\r\n}\r\n\r\nfunction RemoveItemFromRecoveryList(DocID, Version) {\r\n var dialog = $('div[role=dialog]:visible');\r\n dialog.find('div#' + DocID + '[version=' + Version + ']').remove();\r\n if (IsRecoveryListEmpty(dialog)) {\r\n //AddEmptyItemToList(dialog);\r\n CloseRecoveryDialog(dialog);\r\n }\r\n}\r\n\r\nfunction AddEmptyItemToList(dialog) {\r\n dialog.find('#modal_window').children('span').append('' + L(\"EMPTY\") + '');\r\n}\r\n\r\nfunction IsRecoveryListEmpty(dialog) {\r\n return dialog.find('#modal_window').find('.List').length == 0;\r\n}\r\n\r\nfunction CloseRecoveryDialog(dialog) {\r\n dialog.find('.ui-icon-closethick').click();\r\n}\r\n\r\nfunction updateOpenedDocumentsWidget() {\r\n if (Core.footer.openedDocumentsWidget)\r\n Core.footer.openedDocumentsWidget.update();\r\n};","/// \r\n\r\nfunction RequestPasswordForDecryption(Doc, OnPasswordEnter, OnClose, SetNewPassword, ChangePassword) {\r\n var settings = {\r\n ok: function () {\r\n var password = $(\"#docPassword\").val();\r\n $(\"#docPassword\").data('entered', true);\r\n if (!!SetNewPassword && OnPasswordEnter) {\r\n var passwordConfirm = $('#docPasswordConfirm').val();\r\n return OnPasswordEnter(password, passwordConfirm);\r\n }\r\n if (!!ChangePassword && OnPasswordEnter) {\r\n var oldPassword = $('#docOldPassword').val();\r\n var passwordConfirm = $('#docPasswordConfirm').val();\r\n return OnPasswordEnter(oldPassword, password, passwordConfirm);\r\n }\r\n if (OnPasswordEnter) return OnPasswordEnter(password);\r\n }\r\n };\r\n var dialog = new WA.components.dialogs.BaseDialog(settings);\r\n\r\n var docName = '
';\r\n //'
' +\r\n //'
' + Doc.ClientName + '.' + Doc.Editor.Extension.toLowerCase() + '
' +\r\n //'
';\r\n var passwordInput = '
' +\r\n (!!ChangePassword ? '' : '') +\r\n '' +\r\n (!!SetNewPassword || !!ChangePassword ? '' : '') +\r\n '
';\r\n\r\n\r\n dialog.title = L(\"ENTER_PASSWORD\");\r\n dialog.isShowCancelButton = true;\r\n //dialog.onClose = function () { clearAllModalDivs(); }\r\n if (!!OnClose) dialog.onClose = function() { OnClose(); };\r\n dialog.onOpen = function () { BindPasswordFieldToOk(dialog); dialog.disableButton('modal_ok_button'); };\r\n dialog.setHtml(docName + passwordInput);\r\n dialog.show();\r\n return dialog;\r\n}\r\n\r\nfunction OnKeyUpPassDoc(event, el, id) {\r\n if (event.keyCode == 13) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n var button = $('#dialog_content_' + id).parent().parent().find('button.primary'); //$('div.ui-dialog').find('.ui-dialog-buttonset:visible').children().first();\r\n if (!button.hasClass('disabled')) button.click();\r\n return false;\r\n }\r\n}\r\n\r\nfunction BindPasswordFieldToOk(dialog) {\r\n $('#docPassword').keyup(function (ev) {\r\n if ($(this).val() != '')\r\n {\r\n dialog.enableButton('modal_ok_button');\r\n }\r\n else {\r\n dialog.disableButton('modal_ok_button');\r\n }\r\n });\r\n}\r\n\r\n\r\nfunction SetPasswordForDoc(checkbox) {\r\n checkbox = $(checkbox);\r\n if (checkbox.is(':checked')) {\r\n if (true){//$('#__SELECTED_USERS').val().indexOf('g_') == -1) {\r\n if (!!checkbox.data('password')) {\r\n }\r\n else {\r\n if (WA.Document.Encoding < 2) {\r\n RequestPasswordForDecryption(\"\", function (password, confirmation) {\r\n if (!IsPasswordConfirmed(password, confirmation)) return false;\r\n checkbox.data('password', password);\r\n return true;\r\n },\r\n function () {\r\n if (!!!checkbox.data('password') && checkbox.data('password') != \"\") { checkbox.removeAttr('checked'); }\r\n },\r\n true);\r\n }\r\n }\r\n }\r\n else {\r\n ShowWarning(L('CANNOT_ENCRYPT_PASSWORD_USERGROUP_QUALIFIED'), null, 400);\r\n checkbox.removeAttr('checked');\r\n }\r\n }\r\n else {\r\n if (WA.Document.Encoding >= 2) {\r\n RequestPasswordForDecryption(\"\", function (password) {\r\n checkbox.data('password', password);\r\n //WA.current.toolBar.buttons.ChangeDocPassword.disable();\r\n },\r\n function () {\r\n if (!!!checkbox.data('password')) { checkbox.attr('checked', true); }\r\n });\r\n }\r\n else {\r\n checkbox.data('password', null);\r\n }\r\n }\r\n}\r\n\r\nfunction ChangeDocPassword() {\r\n\r\n var changePassword = function (oldPassword, password, encryptionKey) {\r\n encryptionKey = !!encryptionKey ? encryptionKey : \"\";\r\n WA.SRV.call(\"/Document.asmx/ChangePassword\", { DocumentID: WA.Document.ID, OldPassword: oldPassword, NewPassword: password, EncryptionKey : encryptionKey }).success(function () {\r\n HideTopSpinner(L(\"USER_PASSWORD_WAS_CHANGED_SUCCESSFULLY\"), 2000);\r\n }).fail(function (error) {\r\n ShowError(error);\r\n });\r\n };\r\n\r\n if (WA.Document.Encoding >= 2)\r\n {\r\n RequestPasswordForDecryption(\"\", function (oldPassword, password, confirmation) {\r\n if (!IsPasswordConfirmed(password, confirmation)) return false;\r\n\r\n if (WA.Document.Encoding == 3) {\r\n RequestToken(TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n WebAccess.agent.transmitRequest(\"getdocdecryptedkey\", \"edmsplugin\",\r\n { \"DocID\": WA.Document.ID, \"Version\": 0, \"Token\": token, \"EncodeType\": WA.Document.Encoding, \"EncryptionPluginName\": WA.Document.PluginName, \"Password\": oldPassword })\r\n .done(function(response) {\r\n changePassword(oldPassword, password, response.result);\r\n }).fail(function(response) {\r\n ShowError(response.message);\r\n });\r\n }, WA.Document.ID, 0);\r\n return true;\r\n }\r\n changePassword(oldPassword, password, null);\r\n return true;\r\n }, null, null, true);\r\n }\r\n}\r\n\r\nfunction IsPasswordConfirmed(password, confirmation)\r\n{\r\n if (password != \"\" && confirmation == \"\") {\r\n ShowWarning(L(\"WRN_ENTER_PASSWORD_CONFIRAMATION\"), null, 350, function () { $('#docPasswordConfirm').focus(); });\r\n return false;\r\n }\r\n if (password != confirmation) {\r\n ShowWarning(L(\"WRN_PASSWORD_AND_CONFIRMATION_MUST_MATCH\"), null, 350, function () { $('#docPasswordConfirm').focus(); });\r\n return false;\r\n }\r\n if (password == \"\") return false;\r\n return true;\r\n}\r\n\r\nfunction SetCertForDoc(checkbox) {\r\n checkbox = $(checkbox);\r\n var passwordCheckbox = $('#EncryptWithPasswordCheckBox');\r\n if (checkbox.is(':checked')) {\r\n if (true){//$('#__SELECTED_USERS').val().indexOf('g_') == -1) {\r\n if (WA.Document.Encoding == 3) {\r\n passwordCheckbox.data('password', null);\r\n }\r\n if (WA.Document.Encoding == 2) {\r\n RequestPasswordForDecryption(\"\", function (password) {\r\n passwordCheckbox.data('password', password);\r\n return true;\r\n },\r\n function () {\r\n if (!!!passwordCheckbox.data('password') && checkbox.data('password') != \"\") { checkbox.removeAttr('checked'); }\r\n });\r\n }\r\n }\r\n else {\r\n ShowWarning(L('CANNOT_ENCRYPT_CERT_USERGROUP_QUALIFIED'), null, 400);\r\n checkbox.removeAttr('checked');\r\n }\r\n }\r\n else {\r\n if (WA.Document.Encoding == 3) {\r\n if (!passwordCheckbox.data('password') || passwordCheckbox.data('password') == \"\") {\r\n RequestPasswordForDecryption(\"\", function (password) {\r\n passwordCheckbox.data('password', password);\r\n //WA.current.toolBar.buttons.ChangeDocPassword.disable();\r\n return true;\r\n },\r\n function () {\r\n if (!passwordCheckbox.data('password') && passwordCheckbox.data('password') != \"\") { checkbox.attr('checked', true); }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","/* =Связанные документы=========================================================================================================================== */\r\nfunction LoadSubRelations(type, obj, id, refcode, filter, additional) {\r\n $.ajax({\r\n type: \"GET\",\r\n dataType: \"html\",\r\n url: \"DynControl.ashx?c=\" + type + \"&id=\" + id + \"&refcode=\" + refcode + \"&filter=\" + filter + '&additional=' + additional,\r\n success: function (res) {\r\n if (!CheckForLoginPage(res)) {\r\n obj.html(res);\r\n var list = obj.find('.List');\r\n InitHover(list);\r\n InitListClick(list);\r\n if (WA.ObjectListInit.state() === \"resolved\" && !!WA.CR.objectList) WA.CR.objectList.fire(\"itemsChange\");\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction ShowRelations(type, obj) {\r\n var tr = $(obj).parent();\r\n\r\n var filter;\r\n var tbl = tr.parent();\r\n var tblID = tbl.attr('id');\r\n var tbl_ids = tblID.split('_');\r\n if (tbl_ids[0] == 'REL') {\r\n filter = tbl_ids[1];\r\n } else {\r\n filter = $('#OBJ_' + tblID).val() + \"-\";\r\n }\r\n\r\n var additional = $('#ADD_' + tblID).val();\r\n\r\n var id = tr.attr('id');\r\n var refcode = tr.attr('compcode');\r\n var isAdded = tr.next().hasClass('SubBounds');\r\n var trAdd;\r\n if (!isAdded) {\r\n tr.after('
');\r\n }\r\n trAdd = tr.next();\r\n if (trAdd.is(':hidden') || !isAdded) {\r\n trAdd.show();\r\n $(obj).find('.att_plus\\\\.png').removeClass('att_plus.png').addClass('att_minus.png');\r\n trAdd.html('');\r\n LoadSubRelations(type, trAdd, id, refcode, filter, additional);\r\n } else {\r\n trAdd.hide();\r\n $(obj).find('.att_minus\\\\.png').removeClass('att_minus.png').addClass('att_plus.png');\r\n }\r\n}\r\n\r\nfunction RefSelect_GetSelectedValue(item, parent) {\r\n var RefCode = $(item).data('refcode');\r\n var RecID = $('#hSelID_' + parent).val();\r\n if (RecID !== '') {\r\n var b = RecID.split(';');\r\n if (b.length == 2) {\r\n RefCode = b[0];\r\n RecID = b[1];\r\n }\r\n return [RefCode, RecID];\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction Reference_OpenRecordInNewWindow(item, parent, viewName) {\r\n var viewNameParam = viewName ? \"&refview=\" + viewName : \"\";\r\n var v = RefSelect_GetSelectedValue(item, parent);\r\n window.open(\"/Reference.aspx?sys=\" + g_SysCode + \"&ext=\" + g_ExtName + \"&compcode=\" + encodeURI(v[0]) + viewNameParam + \"&id=\" + v[1] + \"&parent=\" + parent, 'RefRec' + v[1]);\r\n}\r\n\r\nfunction InputOnMouseOverForShowAddIcons(el, inp, IsShowCreateButton, IsAccessDenied) {\r\n var me = $(el).closest('.reference_requisite');\r\n var icons = me.find('.Req_AdditionalIcons');\r\n\r\n var OpenIco = icons.find('.OpenCardIco');\r\n var CreateRecIco = icons.find('.CreateRecIco');\r\n var selVal = RefSelect_GetSelectedValue(OpenIco, inp.attr('id'));\r\n if (selVal != null && selVal !== '*' && !IsAccessDenied && (inp.data('selected') == \"true\" || inp.data('selected') == \"selected\" || inp.data('selected') === true) && /^\\d+$/.test(selVal[1])) {\r\n OpenIco.show();\r\n } else {\r\n OpenIco.hide();\r\n }\r\n\r\n if (IsShowCreateButton && !IsAccessDenied && inp.attr('readonly') != 'readonly') {\r\n CreateRecIco.show();\r\n } else {\r\n CreateRecIco.hide();\r\n }\r\n\r\n icons.show();\r\n\r\n icons.find('.ErrorRecIco').eq(0).attr(\"title\", \"Возникла какая-то ошибка\");\r\n icons.find('.ErrorRecIco').show();\r\n}\r\n\r\nfunction InputOnMouseOutForShowAddIcons() {\r\n $(this).parent().find('.Req_AdditionalIcons').hide().find('p').hide();\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Фильтрация ввода пользователя согласно регулярному выражению====================================================================================== */\r\n(function ($) {\r\n $.fn.extend({\r\n Validator: function (regexstr, decimalSeparator) {\r\n this.each(function () {\r\n $(this).keypress(function (event) {\r\n if ($(this).attr('readonly') === 'readonly') return;\r\n\r\n var self = this;\r\n var code = event.which;\r\n if (code != 0 && code != 8) {\r\n var c = String.fromCharCode(code); // определяем какая буква была нажата.\r\n var docSelection = document.selection;\r\n if (docSelection) { // для IE<11\r\n self.focus();\r\n var Sel = docSelection.createRange();\r\n var SelLength = docSelection.createRange().text.length;\r\n Sel.moveStart('character', -self.value.length);\r\n SelStart = Sel.text.length - SelLength;\r\n SelEnd = SelStart + SelLength;\r\n $(event.target).trigger('change');\r\n } else {\r\n SelStart = event.target.selectionStart;\r\n SelEnd = event.target.selectionEnd;\r\n if (WA.ENV.browser.name == 'IE' && WA.ENV.browser.major == '11') {\r\n $(event.target).trigger('change');\r\n }\r\n }\r\n //формируем новое значение.\r\n var val = self.value.substr(0, SelStart) + c + self.value.substr(SelEnd);\r\n var patt = new RegExp(regexstr);\r\n if (!patt.test(val)) {\r\n return false;\r\n }\r\n var isIDevice = (/iphone|ipad/gi).test(navigator.appVersion);\r\n\r\n if (decimalSeparator) {\r\n if (isIDevice) {\r\n setTimeout(function () {\r\n //Lysenko_YN: иначе значения при вводе дублируются. Происходит потому что при вводе значения self.value уже содержит измененное значение а не исходное.\r\n val = self.value;\r\n $(self).val(val.replace(/[.,]/g, decimalSeparator));\r\n }, 0);\r\n }\r\n else {\r\n setTimeout(function () { $(self).val(val.replace(/[.,]/g, decimalSeparator)) }, 0);\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n });\r\n return this;\r\n }\r\n });\r\n})(jQuery);\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Перезагрузка окна после открытия на изменения версии============================================================================================== */\r\nfunction EditVersion(el, msg) {\r\n ShowTopSpinner(msg);\r\n var funcReload;\r\n if (typeof ReloadVersionList == \"undefined\")\r\n funcReload = function () { window.location.reload(); };\r\n else\r\n funcReload = ReloadVersionList;\r\n setTimeout(funcReload, 1000);\r\n}\r\n/*function ReloadVerAddRegion(ID) {\r\nvar el = document;\r\nvar update_func = function (ID, el) {\r\n//(\"tr[id=\" + ID + \"].AddRegion tr[id=ViewList_VersionList]\", el).click();\r\nShowAddRegion($(\"tr[id=\" + ID + \"]:first\"), true, true);\r\n}\r\nif (ID == null) {\r\nID = window.name.substring(4);\r\nif (window.opener != null) {\r\nel = window.opener.document;\r\nupdate_func(ID, el);\r\n}\r\n} else {\r\nsetTimeout(function () { update_func(ID, el); }, 1000);\r\n}\r\n}*/\r\nfunction VerLockOrUnlock(ID, Ver, msg, addArea) {\r\n var s_res = {};\r\n ShowTopSpinner(msg);\r\n var funcReload;\r\n if (typeof ReloadVersionList == \"undefined\")\r\n funcReload = function () { window.location.reload(); };\r\n else\r\n funcReload = ReloadVersionList;\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/EDocument.asmx/VersionLockUnlock\",\r\n data: \"{'EDocID':'\" + ID + \"', 'VerNum':'\" + Ver + \"'}\",\r\n async: false,\r\n cache: false,\r\n success: function (res) {\r\n HideTopSpinner(\"\", 1);\r\n s_res = res.d;\r\n if (!CheckForLoginPage(s_res)) {\r\n if (s_res.Warning == '' && s_res.Error == '') {\r\n funcReload();\r\n } else { \r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll(); \r\n if (s_res.Warning) {\r\n WA.CR.inlineHint.showWarning(s_res.Warning, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n } else {\r\n WA.CR.inlineHint.showError(s_res.Error, null, INLINE_HINT_PRIORITY.PRIMARY);\r\n } \r\n }); \r\n }\r\n }\r\n }\r\n });\r\n}\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\nvar oldf = '';\r\nfunction InitContentListToolbox(cont_id) {\r\n setInlineHint();\r\n EnableOrDisableCheckAll();\r\n}\r\n\r\nfunction EnableOrDisableCheckAll() {\r\n var checkBox = $('#QFilter').find('#chkAll');\r\n if (checkBox.length) {\r\n if ($('.List').length > 0) {\r\n checkBox.attr('disabled', false);\r\n }\r\n else checkBox.attr('disabled', true);\r\n }\r\n}\r\n\r\nfunction clearInlineHint(obj) {\r\n if (!$.ipad) {\r\n if ($(obj).hasClass('Req_Gray')) {\r\n $(obj).val('').removeClass('Req_Gray');\r\n }\r\n }\r\n}\r\n\r\nfunction setInlineHint() {\r\n var labels = L('SEARCH_BY') + \" \";\r\n var filterVariants = $(\"#QFilter input[id*='FilterVariantsLoc']\");\r\n if (filterVariants.length > 0) {\r\n var arr = filterVariants.val().split(\";\");\r\n for (var i = 0; i < arr.length; i++) {\r\n labels += arr[i].toLowerCase() + \", \";\r\n }\r\n labels = labels.substr(0, labels.length - 2);\r\n $('#FastSearch').attr('placeholder', labels);\r\n }\r\n}\r\n\r\nfunction FilterEDMSContent(componentID, filterVal, filterRequisites) {\r\n WA.CR.objectList.setLikeFilter(filterVal, filterRequisites).reload();\r\n\r\n if (Core.isStatisticEnabled) {\r\n ///Запись в статистику\r\n WA.CR.statistics.write({\r\n page: WA.getLocation(),\r\n action: \"FilterQuery\",\r\n area: 'FilterPanel',\r\n target: $('#' + componentID).get(0)\r\n });\r\n };\r\n}\r\n\r\nvar g_clipboard = null;\r\n\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\n\r\n/* = Клиентская сортировка ============================================================================================== */\r\nfunction LinkClick(el) {\r\n $(\"form:first\").attr(\"action\", el.href).submit();\r\n}\r\n\r\n// Сохранение последнего выбранного объекта.\r\nfunction SaveLastRun(id) {\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Wizard.asmx/LastRun\" + WSSParam,\r\n data: \"{'ID':'\" + id + \"'}\",\r\n async: false,\r\n cache: false,\r\n success: function (res) {\r\n }\r\n });\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n\r\n/**\r\n * Получить код ТМа по его ИД.\r\n *\r\n * @global\r\n * @function getStandardRouteCodeByID\r\n * @param {number} routeID ИД ТМа.\r\n * @param {function} [successCallback] Callback-функция, выполняемая в случае успешного получения кода записи справочника.\r\n * @param {function} [failCallback] Callback-функция, выполняемая в случае неудаленого получения кода записи справочника.\r\n */\r\nfunction getStandardRouteCodeByID(routeID, successCallback, failCallback) {\r\n getFilteredRecords(\r\n 'ТМТ',\r\n `[ИД] = ${routeID}`,\r\n '',\r\n ['Код'],\r\n 1,\r\n 0,\r\n 0,\r\n '',\r\n successCallback,\r\n failCallback\r\n );\r\n}\r\n\r\n/**\r\n * Получить записи справочника.\r\n *\r\n * @global\r\n * @function getFilteredRecords\r\n * @param {string} referenceCode Код справочника.\r\n * @param {string} filterExpression Выражение фильтрации.\r\n * @param {string} filterValue Значение фильтра.\r\n * @param {array} requisites Список реквизитов для загрузки.\r\n * @param {number} recordsCount Число записей для выборки.\r\n * @param {number} startFromRecord Индекс записи, с которой начинается выборка.\r\n * @param {number} sortIndex Индекс реквизита, по которому производится сортировка.\r\n * @param {string} sortDirection Направление сортировки.\r\n * @param {function} [successCallback] Callback-функция, выполняемая в случае успешной выборки записей справочника.\r\n * @param {function} [failCallback] Callback-функция, выполняемая в случае неудаленого выборки записей справочника.\r\n */\r\nfunction getFilteredRecords(referenceCode, filterExpression, filterValue, requisites, recordsCount, startFromRecord, sortIndex, sortDirection, successCallback, failCallback) {\r\n CallServiceSync('/Reference.asmx/GetRecords', {\r\n ReferenceCode: referenceCode,\r\n FilterExpression: filterExpression,\r\n FilterValue: filterValue,\r\n Requisites: requisites,\r\n RecordsCount: recordsCount,\r\n StartFromRecord: startFromRecord,\r\n SortIndex: sortIndex,\r\n SortDirection: sortDirection,\r\n }, (data) => {\r\n if (data.Success) {\r\n if (successCallback instanceof Function) {\r\n successCallback(data);\r\n }\r\n } else {\r\n if (failCallback instanceof Function) {\r\n failCallback(data);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Получить код ТМа по его ИД.\r\n *\r\n * @global\r\n * @function GetStandardRouteCodeByAnalit\r\n * @param {number} routeID ИД ТМа.\r\n * @param {function} [successCallback] Callback-функция, выполняемая в случае успешного получения кода записи справочника.\r\n * @param {function} [failCallback] Callback-функция, выполняемая в случае неудаленого получения кода записи справочника.\r\n * @deprecated since 5.6. Use getStandardRouteCodeByID instead.\r\n */\r\nfunction GetStandardRouteCodeByAnalit(...args) {\r\n getStandardRouteCodeByID(...args);\r\n}\r\n\r\n/**\r\n * Получить записи справочника.\r\n *\r\n * @global\r\n * @function GetRecordWithFilteredRequisitedByAnalit\r\n * @param {string} referenceCode Код справочника.\r\n * @param {string} filterExpression Выражение фильтрации.\r\n * @param {string} filterValue Значение фильтра.\r\n * @param {array} requisites Список реквизитов для загрузки.\r\n * @param {number} recordsCount Число записей для выборки.\r\n * @param {number} startFromRecord Индекс записи, с которой начинается выборка.\r\n * @param {number} sortIndex Индекс реквизита, по которому производится сортировка.\r\n * @param {string} sortDirection Направление сортировки.\r\n * @param {function} [successCallback] Callback-функция, выполняемая в случае успешной выборки записей справочника.\r\n * @param {function} [failCallback] Callback-функция, выполняемая в случае неудаленого выборки записей справочника.\r\n * @deprecated since 5.6. Use getFilteredRecords instead.\r\n */\r\nfunction GetRecordWithFilteredRequisitedByAnalit(...args) {\r\n getFilteredRecords(...args);\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n\r\n/* =Пользовательский фильтр ============================================================================================== */\r\n\r\n/**\r\n * Функция выделения элемента из списка обектов\r\n *\r\n * @global\r\n * @function ToggleItem\r\n * @param {object} jItemCheckBox jQuery-объект чекбокса выделяемого элемента.\r\n * @param {object} [jItem] jQuery-объект выделяемого элемента списка.\r\n * @param {bool} [isChecked] True - необходимо выделить элемент, False - снять выделение.\r\n * @deprecated Use WA.CR.objectList.toggleItem instead.\r\n */\r\nfunction ToggleItem(jItemCheckBox, jItem, isChecked) {\r\n WA.CR.objectList.toggleItem(jItemCheckBox, jItem, isChecked);\r\n}\r\n\r\nfunction ToggleAllItem(el) {\r\n var inp;\r\n var isSearchMode = (GetParamInURL('mode') == 'search');\r\n if ($(el).is(':checked')) {\r\n if (!isSearchMode) {\r\n $('.List:not(.selected)').each(function () {\r\n if ($(this).is(':visible')) {\r\n inp = $(this).find('input:first').attr('checked', true);\r\n ToggleItem(inp);\r\n }\r\n });\r\n $(el).attr('title', L('DESELECT_ALL'));\r\n }\r\n else {\r\n $(el).removeAttr('checked').attr('title', L('CANNOT_COPY_ALL_LINKS_IN_SEARCH_RESULTS'));\r\n }\r\n }\r\n else {\r\n $(\".List.selected\").each(function () {\r\n inp = $(this).find('input:first').attr('checked', false);\r\n ToggleItem(inp);\r\n });\r\n $(el).removeClass('notallyet').attr('title', L(isSearchMode ? 'CANNOT_COPY_ALL_LINKS_IN_SEARCH_RESULTS' : 'SELECT_ALL'));\r\n }\r\n UpdateCopyPasteIcons();\r\n}\r\n\r\nfunction ToggleAllItemsInComponent(comp_id) {\r\n var comp = $('#' + comp_id);\r\n var el = $('#' + comp_id + '_chkAll');\r\n\r\n var inp;\r\n if (el.is(':checked')) {\r\n comp.find('.List:not(.selected)').each(\r\n function () {\r\n inp = $(this).find('input:first').attr('checked', 'true'); //.show();\r\n ToggleItem(inp);\r\n }\r\n );\r\n $(el).attr('title', L('DESELECT_ALL'));\r\n }\r\n else {\r\n comp.find('.selected').each(\r\n function () {\r\n inp = $(this).find('input:first').attr('checked', ''); //.hide();\r\n ToggleItem(inp);\r\n }\r\n );\r\n $(el).attr('title', L('SELECT_ALL'));\r\n }\r\n UpdateCopyPasteIcons(comp);\r\n var isChecked = el.is(':checked');\r\n setTimeout(function () { el.attr('checked', isChecked) }, 0); // WTF fix (something makes another check, so to override this...)\r\n}\r\n\r\n// Обновляет иконки (9+)\r\nfunction UpdateSelectionNumbers() {\r\n var objList = $('.object_contents:first');\r\n var num = $('.List.selected', objList).length - (objList.hasClass('ReferenceTable') ? 1 : 0);\r\n if (num == 0) {\r\n $('#toolbar_container .selection_numbers_icon_container').remove();\r\n } else {\r\n $('#toolbar_container .selection_numbers:not(:has(>.selection_numbers_icon_container))').prepend('
');\r\n var cont = $('#toolbar_container .selection_numbers_icon_container');\r\n\r\n // найти все .List:not(.selected) в objList (все элементы с классом List, но без класса selected в objList). Если таких элементов 0 => выбрали все.\r\n if ($('.List:not(.selected)', objList).length == 0) {\r\n num = GetRowsCount();\r\n }\r\n\r\n var title = L('SEND_AS_ATTACHMENT', num);\r\n if (num > 9) num = 10;\r\n var iconSrc = format('links_count_{0}.png', num);\r\n cont.html(format('

', iconSrc, title));\r\n }\r\n}\r\n\r\nvar UpdateCopyPasteIcons; // устанавливает .disabled у \"копировать\" и \"удалить\", если не выбран ни один элемент\r\n(function () {\r\n\r\n function GetButtonsData(comp) {\r\n return comp.data('copypasteicons') || (function () {\r\n var res = {};\r\n res.copy_button = comp.find('div.copy_btn:first');\r\n if (res.copy_button.length) {\r\n res.del_button = comp.find('div.delete_btn');\r\n res.sign_button = comp.find('div.sign_btn');\r\n res.sign_button_initially_disabled = res.sign_button.hasClass('disabled');\r\n res.copy_button_initially_disabled = res.copy_button.hasClass('disabled');\r\n res.del_button_initially_disabled = res.del_button.hasClass('disabled');\r\n res.copy_button_title = res.copy_button.attr('title');\r\n res.del_button_title = res.del_button.attr('title');\r\n }\r\n comp.data('copypasteicons', res);\r\n return res;\r\n })();\r\n }\r\n\r\n UpdateCopyPasteIcons = function (listReq) {\r\n var isFilled = false; // ListRequisite из одного объекта. Если там есть объект, то кнопки копировать и удалить все равно работают.\r\n if (!listReq || !listReq.length) {\r\n listReq = $('.object_contents:first');\r\n UpdateSelectionNumbers();\r\n } else {\r\n var lr = ListRequisite(listReq.attr('id'));\r\n isFilled = !lr.IsList && lr.Values && lr.Values.length > 0;\r\n }\r\n var b = GetButtonsData(listReq);\r\n var isListReq = listReq.hasClass('ListRequisite');\r\n\r\n /**\r\n * Если есть выбранные ссылки указанного типа\r\n * @inner\r\n * @function isSelected\r\n * @return {boolean}\r\n */\r\n var isSelected = function (objType) {\r\n return (listReq.find('.List.' + objType + '_obj.selected').length);\r\n };\r\n\r\n if (b.copy_button.length) {\r\n if (isFilled || listReq.find((isListReq ? '' : '>') + '.List.selected').length) {\r\n if (!b.copy_button_initially_disabled) b.copy_button.removeClass('disabled').attr('title', b.copy_button_title);\r\n\r\n // Отображаем кнопки для подписания всегда, т.к. не знаем, возможно ли запустить агент.\r\n if (isSelected('Job') || isSelected('EDoc') || isSelected('Task')) {\r\n if (!b.sign_button_initially_disabled) b.sign_button.removeClass('disabled').attr('title', L('TOOLBAR_LINKS_SIGN_LINK_TOOLTIP'));\r\n } else {\r\n b.sign_button.attr('title', L(\"NO_LIST_SELECTION\"));\r\n }\r\n\r\n if (listReq.find((isListReq ? '' : '>') + '.List.selected.cannot_delete').length) {\r\n if (!b.del_button_initially_disabled) b.del_button.addClass('disabled').attr('title', L(\"CANNOT_DELETE_ATTACHMENTS_NOT_OWNED\"));\r\n } else {\r\n if (!b.del_button_initially_disabled) b.del_button.removeClass('disabled').attr('title', b.del_button_title);\r\n }\r\n }\r\n else {\r\n var reason = L(\"NO_LIST_SELECTION\");\r\n if (!b.copy_button_initially_disabled) {\r\n b.copy_button.addClass('disabled').attr('title', reason);\r\n }\r\n if (!b.del_button_initially_disabled) {\r\n b.del_button.addClass('disabled').attr('title', reason);\r\n }\r\n if (!b.sign_button_initially_disabled) {\r\n b.sign_button.addClass('disabled').attr('title', reason);\r\n }\r\n //При пустом списке чекбокс недизейблился\r\n EnableOrDisableCheckAll();\r\n }\r\n }\r\n };\r\n\r\n})();\r\n\r\n/////////////////////////////// ListRequisite ////////////////////////////////////////////////////////////////////////\r\n\r\nlet updateChkAll = (comp, chkAll) => {\r\n let allCheckBoxes = comp.find('input.chk');\r\n let checkedBoxes = allCheckBoxes.filter(':checked'); \r\n // Получаем общее количество объектов: для содержимого папок и поисков - это общее количество всех элементов, \r\n // для остальных - загруженные объекты\r\n let allCheckBoxCount = GetRowsCount() || allCheckBoxes.length; \r\n // Устанавливаем Выделить все, только если выделены все записи.\r\n if (checkedBoxes.length === +allCheckBoxCount) {\r\n chkAll.attr('checked', '1').attr('title', L('DESELECT_ALL'));\r\n } else {\r\n chkAll.removeClass('notallyet').removeAttr('checked').attr('title', L('SELECT_ALL'));\r\n }\r\n};\r\n\r\nfunction ToggleFolderItem($this) {\r\n var chk;\r\n if ($this.hasClass('chk')) {\r\n chk = $this;\r\n } else {\r\n if ($this.hasClass('Icon32')) {\r\n chk = $this.parent().find('input.chk:first');\r\n } else {\r\n chk = $this.find('input.chk:first');\r\n }\r\n }\r\n ToggleItem(chk);\r\n}\r\n\r\n// Инициализирует компоненту EntityList.\r\nfunction EntityListInit(_comp, allowSelect, enableActions) {\r\n var comp = _comp;\r\n var tr = comp.children('div.folder_item');\r\n comp.children('div:odd').addClass('even');\r\n\r\n // Что бы обновить кнопки, в том числе, когда ничего не найдено.\r\n UpdateCopyPasteIcons(listReq);\r\n\r\n if (tr.length == 0)\r\n return;\r\n\r\n var el0 = $(tr[0]);\r\n if ($.scrollActive && WA.ENV.isAndroid() && _comp.hasClass('object_contents')) {\r\n var h = _comp.offset().top + _comp.height() + 50;\r\n _comp.css('margin-bottom', '-50px');\r\n setRealHeightAndWidth(null, h);\r\n $.superHeight = true;\r\n }\r\n if (!el0.data('initialized')) {\r\n el0.data('initialized', '1');\r\n InitObjectContentsAutoLoad();\r\n }\r\n\r\n var listReq = _comp.parents('.ListRequisite');\r\n var chkAll = $(\"#\" + listReq.attr('id') + \"_chkAll\");\r\n if (chkAll.length == 0) {\r\n comp = comp.parents(':has(#chkAll)');\r\n chkAll = comp.find('#chkAll');\r\n }\r\n\r\n /**\r\n * Обработчики того, что произойдет при клике на строку списка\r\n */\r\n var eventHandler = function () {\r\n\r\n /**\r\n * @function updateSelection\r\n * @private\r\n */\r\n var _updateSelection = function () {\r\n updateChkAll(_comp, chkAll.addClass('notallyet'));\r\n UpdateCopyPasteIcons(listReq);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Помечает элемент выборанным\r\n * @function _selectItem\r\n * @param {Object} jItem - элемент списка. В данном случае tr.\r\n * @private\r\n */\r\n var _selectItem = function (jItem) {\r\n ToggleFolderItem(jItem);\r\n _updateSelection();\r\n jItem.redraw();\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выбор элемента при клике на него, открытие документа при клике на иконку\r\n * @function bindSelectItems\r\n */\r\n this.bindSelectAndOpenItems = function (jItems) {\r\n if (allowSelect) {\r\n jItems.unbind('mousedown.entitylist').bind('mousedown.entitylist', ev => {\r\n const jItem = $(ev.target);\r\n const classes = jItem.attr('class').split(' ');\r\n // если клик по resizable контролу грида, уходим отсюда\r\n if (classes.includes('ui-resizable-e')) {\r\n return;\r\n }\r\n if (ev.which === 1) {\r\n ev.stopPropagation();\r\n _selectItem(jItem.closest('.object-list-item'));\r\n }\r\n });\r\n StopSelectOnIconClick(jItems.find('.object-list-item__bound-expand-icon, .object-list-item__icon'));\r\n }\r\n InitEDocIconClick(jItems.find('.object-list-item__icon'));\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _comp.data('updateSelection', _updateSelection);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n var handler = new eventHandler();\r\n\r\n // Отображение/скрытие действий (по умолчанию отображаем).\r\n if (enableActions) {\r\n InitShowHideActions(tr);\r\n }\r\n\r\n InitHover(tr);\r\n\r\n handler.bindSelectAndOpenItems(tr);\r\n\r\n tr.unbind('contextmenu.entitylist').bind('contextmenu.entitylist', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n ShowContextMenu($(this), {}, { 'left': e.pageX, 'top': e.pageY }, true);\r\n\r\n //Обновляем доступность кнопок для элементов списка, так как rightClick сам не провоцирует\r\n UpdateCopyPasteIcons(listReq);\r\n return false;\r\n });\r\n\r\n if (listReq.length) {\r\n var lr = ListRequisite(listReq.attr('id'));\r\n if (lr.onUpdate) lr.onUpdate.call(lr);\r\n }\r\n\r\n InitTooltips();\r\n}\r\n\r\nfunction InitListClick(trs) {\r\n trs.unbind('mousedown.entitylist').bind('mousedown.entitylist', function (ev) {\r\n ev.stopPropagation();\r\n var $this = $(this);\r\n ToggleFolderItem($this);\r\n updateChkAll($this.parent(), $('#chkAll').addClass('notallyet'));\r\n });\r\n StopSelectOnIconClick(trs.find(\".object-list-item__bound-expand-icon, .object-list-item__icon\"));\r\n InitEDocIconClick(trs.find(\".object-list-item__icon\"));\r\n}\r\n\r\n// Предотвратить выделение галочкой при нажатии\r\nfunction StopSelectOnIconClick(jIcons) {\r\n jIcons\r\n .off('mousedown.entitylist')\r\n .on('mousedown.entitylist', function (ev) {\r\n // Предотвращаем выделение галочкой.\r\n ev.stopPropagation();\r\n });\r\n}\r\n\r\nfunction InitEDocIconClick(jIcons) {\r\n // При нажатии на иконку документа открывать документа, предотвратить выделение галочкой\r\n jIcons\r\n .off('click.entitylist')\r\n .on('click.entitylist', function (ev) {\r\n ev.stopPropagation();\r\n let jObjectListItemTitle = $(this).closest('.object-list-item').find('.object-list-item__title');\r\n DoFirstAction(jObjectListItemTitle, jObjectListItemTitle.data('type'));\r\n });\r\n}\r\n\r\nfunction InitHover(trs) {\r\n if ($.ipad) return;\r\n var hoverEventNames = GetEventsName('hover_entitylist');\r\n trs\r\n .unbind(hoverEventNames[0]).bind(hoverEventNames[0], function (ev, isManualTriggered) {\r\n if (!isKeyNavigationActive || isManualTriggered) {\r\n $('.List.hover').removeClass('hover');\r\n $(this).addClass('hover');\r\n }\r\n })\r\n .unbind(hoverEventNames[1]).bind(hoverEventNames[1], function (ev, isManualTriggered) {\r\n if (!isKeyNavigationActive || isManualTriggered) {\r\n $(this).removeClass('hover');\r\n }\r\n });\r\n}\r\n\r\nfunction InitShowHideActions(trs) {\r\n if (!$.ipad) {\r\n trs.each(function () {\r\n var $this = $(this);\r\n $this\r\n .unbind('mouseenter.animate_entitylist').bind('mouseenter.animate_entitylist', function (ev, isManualTriggered) {\r\n if (!isKeyNavigationActive || isManualTriggered) {\r\n EntityList_ShowAction($this, trs);\r\n }\r\n })\r\n .unbind('mouseleave.animate_entitylist').bind('mouseleave.animate_entitylist', function (ev, isManualTriggered) {\r\n if (!isKeyNavigationActive || isManualTriggered) {\r\n EntityList_HideAction($this);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nvar dbg_is_hover = false;\r\n\r\n// Отображение действий для элемента списка.\r\nfunction EntityList_ShowAction(el, trs) {\r\n // Формирует панель быстрыъ действий.\r\n function MakeActions(el) {\r\n if (typeof listActionsSettings != 'undefined') {\r\n var objKindMap = { \"edoc\": \"EDocument\", \"task\": \"Task\", \"job\": \"Job\", \"fol\": \"Folder\", \"ref\": \"ReferenceRecord\", \"usr\": \"UserSettings\", 'ver': 'EDocumentVersion' };\r\n var proxy = GetObjectInfoFromRow(el);\r\n var objKind = proxy.kind.toLowerCase();\r\n proxy.type = objKindMap[objKind];\r\n\r\n var sett;\r\n var mode = proxy.tr.attr('mode');\r\n switch (mode) {\r\n case 'EDocRestore':\r\n sett = listActionsSettings['EDocRestore'];\r\n break;\r\n case 'OpenedDocs':\r\n sett = listActionsSettings['OpenedDocs'];\r\n break;\r\n default:\r\n sett = listActionsSettings[proxy.type];\r\n }\r\n\r\n if (sett) {\r\n // Выберем только те действия, которые нужно показать.\r\n var actions = _.filter(sett.items.slice(0), function (item) { return item.needshow ? window[item.needshow](proxy) : true });\r\n if (actions.length > 0) {\r\n if (objKind == 'edoc' && mode != 'EDocRestore' && mode != 'OpenedDocs') {\r\n SetPreviewActionFirst(actions);\r\n if (g_isPreviewEnabled) SortEditActionsByPriority(actions);\r\n }\r\n var actionsHTML = '

';\r\n for (var i = 0; i < actions.length; i++) {\r\n var item = actions[i];\r\n // Формируем так что бы все параметры были в одинарных кавычках ($.toJSON делает все в двойных)\r\n var objStr = \"{'id\\':\" + proxy.id +\r\n \", 'kind':'\" + proxy.kind +\r\n \"', 'type':'\" + proxy.kind +\r\n \"', 'refcode':'\" + (typeof proxy.refcode == 'undefined' ? '' : proxy.refcode) +\r\n \"', 'version':'\" + proxy.tr.attr('version') +\r\n \"', 'encodeType':'\" + (!!proxy.tr.attr('encoding') ? proxy.tr.attr('encoding') : \"\") +\r\n \"', 'pluginName' : '\" + (!!proxy.tr.attr('encpluginname') ? proxy.tr.attr('encpluginname') : \"\") +\r\n \"'}\";\r\n\r\n // Формируем гиперссылку, если нужно.\r\n var hyperlink = MakeActionListItemHyperlink(item, proxy);\r\n\r\n // Формируем текст ссылки.\r\n var text = L(item.text);\r\n if (objKind == 'job' && item.id == 'MarkAsRead') {\r\n if (!el.hasClass('unread')) {\r\n text = L('MENU_MARK_AS_UNREAD');\r\n } else {\r\n text = L('MENU_MARK_AS_READ');\r\n }\r\n }\r\n // Формируем ссылку (быстрое действие).\r\n var ITEM_IMG_TEMPLATE = '';\r\n var iconHtml = (typeof item.icon !== 'undefined') ? format(ITEM_IMG_TEMPLATE, { icon: item.icon }) : '';\r\n actionsHTML += format('{img}', {\r\n 'img': iconHtml,\r\n 'name': item.id,\r\n 'href': (hyperlink != '' ? hyperlink : '#'),\r\n 'target': (item.innewwindow == 'True' ? ('target=\"' + proxy.kind + proxy.id + '\" ') : ' target=\"_self\" '),\r\n 'stopPropagation': 'if(typeof evt != \\'undefined\\') evt.stopPropagation(); else { cancelBubble(event); };',\r\n 'js': (typeof item.jsaction != 'undefined' ? '(function(CurrentActionHTMLElement) {{ ' + item.jsaction + ' }}).call(' + objStr + ',this);' : ''),\r\n 'retFalse': (hyperlink != '' ? '' : 'return false;'),\r\n 'title': text\r\n });\r\n }\r\n return actionsHTML + '
';\r\n }\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n\r\n var content = $(el).addClass('showingActions').find('.content');\r\n if (!isKeyNavigationActive && content.length > 0) {\r\n // Формируем html-код действий.\r\n var actionsHTML = MakeActions(el);\r\n if (actionsHTML != '') {\r\n content.append(actionsHTML);\r\n content.find('.fastActions').show();\r\n }\r\n }\r\n}\r\n\r\n// ставит действие по умолчанию при нажатии на название документа на первое место в быстрых действиях\r\nfunction SetPreviewActionFirst(actions) {\r\n //var defaultAction = g_isPreviewEnabled ? 'preview' : (g_openDocForEditByDefault ? 'open' : 'viewineditor');\r\n if (actions[0].id.toLowerCase() != g_defaultListAction) {\r\n for (var i = 0; i < actions.length; i++) {\r\n if (actions[i].id.toLowerCase() == g_defaultListAction) {\r\n var temp = actions[i];\r\n actions[i] = actions[0];\r\n actions[0] = temp;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction SortEditActionsByPriority(actions) {\r\n var defaultAction = 'open';//(g_openDocForEditByDefault ? 'open' : 'viewineditor');\r\n var secondAction = 'viewineditor';//(!g_openDocForEditByDefault ? 'open' : 'viewineditor');\r\n for (var i = 0; i < actions.length; i++) {\r\n if (actions[i].id.toLowerCase() == defaultAction && i > 0 && actions[i - 1].id.toLowerCase() == secondAction) {\r\n var temp = actions[i];\r\n actions[i] = actions[i - 1];\r\n actions[i - 1] = temp;\r\n break;\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction DoNotShowInSearchResults() {\r\n return !Core.toolBars.main.isSearchMode();\r\n}\r\n\r\nfunction DoNotShowWhenAgentEnabled() {\r\n return !WA.agent.isAvailable();\r\n}\r\n\r\nfunction ShowWhenAgentEnabled() {\r\n return WA.agent.isAvailable();\r\n}\r\n\r\nfunction IsDocOpenedForEditByDefault() {\r\n return ShowWhenAgentEnabled() && g_openDocForEditByDefault;\r\n}\r\n\r\nfunction IsDocOpenedForReadByDefault() {\r\n return ShowWhenAgentEnabled() && !g_openDocForEditByDefault;\r\n}\r\n\r\nfunction IsIsDocOpenedForEditByDefaultAndPreviewDisabled() {\r\n return IsDocOpenedForEditByDefault() && !g_isPreviewEnabled;\r\n}\r\n\r\nfunction IsIsDocOpenedForReadByDefaultAndPreviewDisabled() {\r\n return IsDocOpenedForReadByDefault() && !g_isPreviewEnabled;\r\n}\r\n\r\nfunction IsRecoverActionsAvailable(proxy) {\r\n return $(proxy.tr.context).hasClass('list-item__doc_to-recover');\r\n}\r\n\r\nfunction IsReturnActionAvailable(proxy) {\r\n return $(proxy.tr.context).hasClass('list-item__doc_edited');\r\n}\r\n\r\nfunction IsOpenActionsAvailable(proxy) {\r\n var jContext = $(proxy.tr.context);\r\n return jContext.hasClass('list-item__doc_edited') || jContext.hasClass('list-item__doc_no-change');\r\n}\r\n\r\n\r\n// Скрытие действий для элемента списка.\r\nfunction EntityList_HideAction(el) {\r\n var $el = $(el);\r\n if ($el.hasClass('showingActions') && !$el.hasClass('menu_select')) {\r\n $(el).removeClass('showingActions').find('.fastActions').remove();\r\n }\r\n}\r\n\r\n// Получить список выделенных объектов.\r\nfunction GetSelectedObjects() {\r\n var selected = WA.CR.objectList.getSelectedItems();\r\n return _(selected).map(function (item) {\r\n return {\r\n id: item.id,\r\n kind: item.kind,\r\n refcode: item.referenceName ? item.referenceName : ''\r\n };\r\n });\r\n}\r\n\r\n// Инициализация автоподгрузки в списке объектов.\r\nfunction InitObjectContentsAutoLoad(filterVal, filterRequisites) {\r\n var browser = WA.ENV.browser.name.toLowerCase();\r\n\r\n var MinBottomDistanceToStartAutoLoad = 150; // пикселей\r\n\r\n function BindOnScroll(obj) {\r\n if ($.superHeight || WA.ENV.isAndroid()) {\r\n $.when(WA.ObjectListInit).done(function () {\r\n if (_(WA.CR.objectList.getItems()).size() >= EXPLORER.MAX_OBJECT_ROWS_COUNT) {\r\n // Если длина списка >= MAX_OBJECT_ROWS_COUNT, то отобразим ссылку \"Показать больше объектов\".\r\n if (!$('.main-content__load-more').length) {\r\n var $loadbtn = $('
' + L('AUTO_LOAD_MORE') + '
').click(function () {\r\n $.when(WA.ObjectListInit).done(function () {\r\n AutoLoad(obj);\r\n });\r\n $loadbtn.remove();\r\n });\r\n obj.append($loadbtn);\r\n }\r\n } else {\r\n // Иначе удалим эту ссылку \"Показать больше объектов\", т.к. загружать больше нечего и так ничего нет.\r\n $('.main-content__load-more').remove();\r\n }\r\n });\r\n } else {\r\n var mc = obj.parents('#main_container');\r\n var scroller = mc;\r\n mc.unbind('scroll.auto_load').bind('scroll.auto_load', function () {\r\n if ($.scrollActive) {\r\n var bottomDistance = obj[0].offsetHeight - scroller[0].offsetHeight - scroller.offset().top + obj.offset().top;\r\n } else {\r\n if (browser === 'ie') {\r\n var bottomDistance = obj.height() - scroller.height() - scroller.scrollTop();\r\n } else {\r\n var bottomDistance = obj[0].offsetHeight - scroller[0].offsetHeight - scroller[0].scrollTop;\r\n }\r\n }\r\n if (bottomDistance <= MinBottomDistanceToStartAutoLoad) {\r\n mc.unbind('scroll.auto_load');\r\n $.when(WA.ObjectListInit).done(function () {\r\n AutoLoad(obj);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n function AutoLoad(obj) {\r\n const page = obj.data('nextPage') || 2; \r\n obj.data('nextPage', page + 1);\r\n\r\n const folderId = WA.CR.getID();\r\n\r\n if (filterVal && filterRequisites) {\r\n WA.CR.objectList.setLikeFilter(filterVal, filterRequisites);\r\n }\r\n\r\n removeSpinningThingy();\r\n\r\n const jSpinningThingy = $('
');\r\n const jSpinnerIcon = $('');\r\n const jSpinnerText = $('').html(\r\n L('PLEASE_WAIT')\r\n );\r\n jSpinningThingy.append(jSpinnerIcon).append(jSpinnerText);\r\n jSpinningThingy.appendTo(obj);\r\n obj.data('spinningThingy', jSpinningThingy);\r\n\r\n function removeSpinningThingy() {\r\n if (obj.data('spinningThingy')) {\r\n obj.data('spinningThingy').remove();\r\n obj.data('spinningThingy', null);\r\n }\r\n }\r\n\r\n // Запомним невыделенные записи, чтобы при дозагрузке они не выделились\r\n let unselectedLinks = WA.CR.objectList.getUnselectedItems();\r\n \r\n WA.CR.objectList._loadPage(folderId, page).done((res) => {\r\n removeSpinningThingy();\r\n if (!CheckForLoginPage(res)) {\r\n const count = obj.children('div.List').length;\r\n obj.append(res);\r\n EntityListInit(obj, true);\r\n if ($.scrollActive && window.mainScroll) {\r\n mainScroll.refresh();\r\n }\r\n setTimeout(() => {\r\n let objs = obj.children('div.List');\r\n if (objs.length > count) {\r\n BindOnScroll(obj);\r\n } else {\r\n if (objs.length > g_MaxRowsPerPage) {\r\n let jAutoLoadNoMore = $('.main-content__all-loaded', obj);\r\n if (!jAutoLoadNoMore.length) {\r\n $('
' + L('NO_MORE_ITEMS') + '
').appendTo(obj);\r\n }\r\n else {\r\n jAutoLoadNoMore.show();\r\n }\r\n }\r\n $('.main-content__load-more').hide();\r\n }\r\n\r\n if (WA.ObjectListInit.state() === 'resolved' && !!WA.CR.objectList && WA.CR.objectList.isAllItemsSelected()) { \r\n let isUnselected = (jItem) => { \r\n return unselectedLinks.some((unselectedLink) => {\r\n let sameId = +unselectedLink.id === +jItem.attr('id');\r\n let sameKind = unselectedLink.kind.toLowerCase() === jItem.attr('kind').toLowerCase();\r\n return sameId && sameKind;\r\n });\r\n }\r\n \r\n // Отмечаем как выделенные, только вновь загруженные строки\r\n objs.not('.selected').each((index, item) => { \r\n let jItem = $(item);\r\n if (!unselectedLinks.length || !isUnselected(jItem)) { \r\n let jcheckBox = jItem.find('input') \r\n WA.CR.objectList.toggleItem(jcheckBox, jItem, true); \r\n } \r\n });\r\n }\r\n\r\n UpdateRowsCount();\r\n Core.pages.explorer.updateOrApplyGridOptions(folderId);\r\n\r\n /**\r\n * Чтобы прокрутка на iPad проходила до конца списка\r\n * @see Замечание 78037\r\n */\r\n if ($.scrollActive && window.mainScroll) {\r\n mainScroll.refresh();\r\n }\r\n\r\n //Обновим объект клиентской ОМ\r\n if (WA.ObjectListInit.state() === 'resolved' && !!WA.CR.objectList) {\r\n WA.CR.objectList.fire('itemsChange');\r\n }\r\n }, 0);\r\n }\r\n }).fail(() => {\r\n removeSpinningThingy();\r\n });\r\n }\r\n\r\n $('.object_contents.auto_load').each(function () {\r\n var $this = $(this);\r\n $this.data('AutoLoad', function () {\r\n $.when(WA.ObjectListInit).done(function () {\r\n AutoLoad($this);\r\n });\r\n });\r\n BindOnScroll($this);\r\n });\r\n}\r\n\r\nfunction ExplorerInitialScroll(initialItemsCount, itemsOnPage) {\r\n var obj = $('.object_contents.auto_load');\r\n if (obj.length) {\r\n var nextPage = (itemsOnPage === 0) ? 1 : Math.ceil(initialItemsCount / itemsOnPage) + 1;\r\n obj.data('nextPage', nextPage);\r\n var initScroll = parseInt($.cookie('load_scroll'), 10);\r\n if (initScroll) {\r\n setTimeout(function () {\r\n obj.parents('#main_container').scrollTop(initScroll);\r\n }, 0);\r\n }\r\n }\r\n}\r\n\r\nfunction enableButtonAddInListRequisite(idListReq, data) {\r\n if (data != null) {\r\n if (data.length != 0) {\r\n $('#' + idListReq).find('button').removeClass('disabled').removeAttr('disabled');\r\n }\r\n } else {\r\n $('#' + idListReq).find('button').addClass('disabled').attr('disabled', 'diasabled');\r\n }\r\n}\r\n// Функции для реквизита \"Список объектов\".\r\nvar ListRequisite;\r\n(function () {\r\n\r\n // Кэш объектов ListRequisiteClass.\r\n var controls = {};\r\n\r\n // Возвращает объект для работы с ListRequisite.\r\n // string id: ClientID объекта\r\n ListRequisite = function (id) {\r\n if (!id) {\r\n return {};\r\n } else if (id === 'ctl00_MainContent_Attachments_AttachmentsList' || id === 'Attachments_AttachmentsList_list') {\r\n // где-то остался старый id контейнера, соединим их\r\n id = 'Attachments_AttachmentsList';\r\n }\r\n\r\n if (!controls.hasOwnProperty(id)) {\r\n controls[id] = new ListRequisiteClass(id);\r\n if (!controls[id].elem) {\r\n controls[id].elem = $(`#${id}`);\r\n }\r\n }\r\n\r\n const list = controls[id];\r\n if (list.elem && !list.elem.length) {\r\n list.elem = $(list.elem.selector);\r\n }\r\n return list;\r\n };\r\n\r\n // Класс для работы с ListRequisite.\r\n function ListRequisiteClass(id) {\r\n this.id = id;\r\n }\r\n\r\n ListRequisiteClass.prototype = {\r\n\r\n AjaxInProcess: false,\r\n\r\n // Инициализирует объект.\r\n // string param.ContentKind: тип объектов в списке\r\n // bool param.ReadOnly: реквизит только для чтения\r\n // string param.RefCode: код справочника\r\n // bool param.IsList: если true, то это список, иначе это 1 объект\r\n // array param.Values: массив ссылок на объекты\r\n Init: function (param) {\r\n var me = this;\r\n $.extend(me, param);\r\n me.elem = $('#' + me.id);\r\n me.Values = $.parseJSON(me.Values);\r\n var valJSON = $.toJSON(me.Values);\r\n $('#' + me.id + \"_data\").val(valJSON);\r\n me.AjaxInProcess = false;\r\n if (param.OnLoad) {\r\n var onLoadFunc = new Function(param.OnLoad);\r\n onLoadFunc.call(me);\r\n }\r\n UpdateCopyPasteIcons(me.elem);\r\n },\r\n\r\n Disable: function () {\r\n var me = this;\r\n me.elem.find('.ListRequisiteOuterPanel').addClass('readonly')\r\n .find('.paste_btn, .cut_btn, .delete_btn').hide();\r\n me.elem.find('.ListRequisite__addReferencePanel').hide();\r\n me.ReadOnly = true;\r\n },\r\n\r\n Enable: function () {\r\n var me = this;\r\n me.elem.find('.ListRequisiteOuterPanel').removeClass('readonly')\r\n .find('.paste_btn, .delete_btn').show();\r\n me.elem.find('.ListRequisite__addReferencePanel').show();\r\n me.ReadOnly = false;\r\n },\r\n\r\n /**\r\n * Подписывает выбранные ссылки\r\n * @method ListRequisie#SignLinks\r\n * @param callback: функция обратного вызова для обработанной ссылки.\r\n * @param completeMsg: сообщение о завершении операции.\r\n * @since 5.1.0.1505\r\n * @return {ListRequisie}\r\n */\r\n SignLinks: function (callback, completeMsg) {\r\n var me = this;\r\n var links = me.GetSelectedLinks();\r\n if (links.hrefs != '') {\r\n\r\n Core.agent.getPlugin(\"edmsplugin\").done(function () {\r\n Core.objectList.signLinks(_.map(links.links, function (link) {\r\n var newLinkWithName = $.extend({}, link);\r\n // GetSelectedLinks возвращает ссылки, в которых в поле Desc написано наименование объекта, но для отображения ошибок нужно свойство name.\r\n newLinkWithName[\"name\"] = newLinkWithName[\"Desc\"];\r\n delete newLinkWithName[\"Desc\"];\r\n return newLinkWithName;\r\n }));\r\n });\r\n\r\n } else {\r\n (new WA.CMP.NTF.Toast).show(L(\"OBJECTS_NOT_SELECTED\"));\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Копирует выделенные ссылки в буфер.\r\n *\r\n * @param {function} callback функция обратного вызова для обработанной ссылки.\r\n * @param {string} completeMsg сообщение о завершении операции.\r\n */\r\n CopyLinks: function (callback, completeMsg) {\r\n var me = this;\r\n\r\n setLinksSource(null, null);\r\n\r\n me.ShowSpinner(L(\"COPY_LINKS\"));\r\n\r\n var linkContainer = me.GetSelectedLinks();\r\n if (linkContainer.hrefs != '') {\r\n var linkModels = linkContainer.links;\r\n var apiLinks = convertLinkModelsToAgentLinks(linkModels);\r\n Core.clipboard.copyLinksToClipboard(apiLinks).done(function (copiedLinksCount) {\r\n me.HideSpinner(L(\"COPIED_LINKS\", copiedLinksCount), 2000);\r\n }).fail(function (completeMsg) {\r\n me.HideSpinner(completeMsg, 2000);\r\n });\r\n } else {\r\n me.ShowSpinner(L(\"OBJECTS_NOT_SELECTED\"), 2000);\r\n }\r\n },\r\n\r\n /**\r\n * Вставляет ссылки в список объектов (с проверкой соответствия).\r\n *\r\n * @param {function} callback функция обратного вызова для обработанной ссылки.\r\n * @param {string} completeMsg сообщение о завершении операции.\r\n */\r\n PasteLinks: function (callback, completeMsg) {\r\n var me = this;\r\n\r\n if (me.ReadOnly) return;\r\n\r\n if (!me.AjaxInProcess) {\r\n me.AjaxInProcess = true;\r\n setLinksSource(null, null);\r\n me.ShowSpinner(L(\"PASTE_LINKS\"));\r\n if (!me.IsAttachments) {\r\n WebAccess.agent.isPluginAvailable(\"Clipboard\").always(function (isAvailableResponse) {\r\n // HACK: Агент неадекватно работает в IE. Поэтому все вставки ссылок будут идти через Session.asmx.\r\n if ((isAvailableResponse) && (WA.ENV.browser.name != \"IE\")) {\r\n Core.clipboard.getLinksFromClipboard().done(function (links) {\r\n me.AddLinks(links, me, callback, completeMsg);\r\n me.AjaxInProcess = false;\r\n });\r\n } else {\r\n CallService(\"/Session.asmx/GetLinksFromBuffer\",\r\n null,\r\n function (res) {\r\n if (res.Success) {\r\n var links = res.Result;\r\n me.AddLinks(links, me, callback, completeMsg);\r\n } else {\r\n me.HideSpinner(res.Error, 5000);\r\n }\r\n me.AjaxInProcess = false;\r\n },\r\n function () {\r\n me.AjaxInProcess = false;\r\n });\r\n }\r\n }\r\n );\r\n } else {\r\n var oldCount = me.Values.length;\r\n var svcParams = {\r\n ClientID: me.id + \"_list\",\r\n CustomWorkID: me.CustomWorkID,\r\n CustomWorkType: me.CustomWorkType\r\n };\r\n\r\n var callServiceToPaste = function (svcMethodName, svcParams) {\r\n me.CallMyService(svcMethodName,\r\n svcParams,\r\n function (res) {\r\n me.RenderList(res);\r\n\r\n var newCount = me.Values.length;\r\n var pasteCount = newCount - oldCount;\r\n if (pasteCount > 0) {\r\n me.elem.trigger('change', me.Values);\r\n if (completeMsg === \"\" || !(completeMsg))\r\n me.HideSpinner(L(\"PASTED_LINKS\", pasteCount), 2000);\r\n else\r\n me.HideSpinner(completeMsg, 2000);\r\n EnableOrDisableCheckAll();\r\n } else {\r\n me.HideSpinner(L(\"NOT_LINKS_TO_PASTE\"), 2000);\r\n }\r\n if (callback) callback(res);\r\n me.AjaxInProcess = false;\r\n },\r\n function (x, e1, e2) {\r\n me.AjaxInProcess = false;\r\n });\r\n };\r\n\r\n WebAccess.agent.isPluginAvailable(\"Clipboard\").always(function (isAvailableResponse) {\r\n if (isAvailableResponse) {\r\n Core.clipboard.getLinksFromClipboard()\r\n .done(function (links) {\r\n $.extend(svcParams, { Links: links });\r\n callServiceToPaste(\"PasteLinks\", svcParams);\r\n }).fail(function () {\r\n callServiceToPaste(\"PasteAttachments\", svcParams);\r\n });\r\n } else {\r\n callServiceToPaste(\"PasteAttachments\", svcParams);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n\r\n // Добавляет ссылки в список.\r\n // @param callback: функция обратного вызова для обработанной ссылки.\r\n // @param completeMsg: сообщение о завершении операции.\r\n AddLinks: function (links, me, callback, completeMsg) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n var counter = 0;\r\n if (links) {\r\n $.each(links, function () {\r\n //Проверяем на соответствие объекта списку\r\n if (me.CheckObject(this)) {\r\n //Проверяем вставился ли объект в список\r\n if ((!callback) || (callback(this))) {\r\n me.AddObject(this);\r\n counter += 1;\r\n return me.IsList;\r\n }\r\n }\r\n });\r\n }\r\n if (counter > 0) {\r\n me.UpdateList(function () {\r\n if (completeMsg === \"\")\r\n me.HideSpinner(L(\"PASTED_LINKS\", counter), 2000);\r\n else\r\n me.HideSpinner(completeMsg, 2000);\r\n });\r\n } else {\r\n me.HideSpinner(L(\"NOT_LINKS_TO_PASTE\"), 2000);\r\n }\r\n },\r\n\r\n // Удаляет выделенные ссылки из списка объектов.\r\n // @param callback: функция обратного вызова для обработанной ссылки.\r\n // @param completeMsg: сообщение о завершении операции.\r\n DeleteLinks: function (links, callback, completeMsg) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n var me = this;\r\n if (!me.AjaxInProcess) {\r\n if (!links) {\r\n var sel = me.GetSelectedLinks();\r\n if (sel.cannotDelete)\r\n return;\r\n links = sel.links;\r\n }\r\n var oldCount = me.Values.length;\r\n if ((links) && (links.length > 0)) {\r\n ConfirmDelete(links.length, me.IsAttachments ? (links.length > 1 ? L(\"CONFIRM_DELETE_ATTACHMENTS\", links.length) : L(\"CONFIRM_DELETE_ATTACHMENT\")) : null).done(function () {\r\n\r\n me.AjaxInProcess = true;\r\n if (!me.IsAttachments) {\r\n var ids = $.map(links, function (link) { return parseInt(link.ID, 10) });\r\n me.Values = $.grep(me.Values, function (v) { return $.inArray(v.ID, ids) == -1; });\r\n var newCount = me.Values.length;\r\n var delCount = oldCount - newCount;\r\n if (delCount > 0) {\r\n me.ShowSpinner(L(\"DELETE_LINKS\"));\r\n me.UpdateList(function () {\r\n if (completeMsg === \"\")\r\n me.HideSpinner(L(\"DELETED_LINKS\", delCount), 2000);\r\n else\r\n me.HideSpinner(completeMsg, 2000);\r\n me.AjaxInProcess = false;\r\n });\r\n if (callback) $.each(links, function (index, link) { callback(link); });\r\n }\r\n } else {\r\n me.ShowSpinner(L(\"DELETE_LINKS\"));\r\n\r\n WA.SRV.call('/ListRequisite.asmx/DeleteAttachments', {\r\n ClientID: me.id + \"_list\",\r\n CustomWorkID: me.CustomWorkID,\r\n CustomWorkType: me.CustomWorkType,\r\n ValuesJSON: $.toJSON(links)\r\n }, null, null, true, true).done(function (res, obj) {\r\n me.RenderList(res);\r\n var newCount = me.Values.length;\r\n var delCount = oldCount - newCount;\r\n if (completeMsg === \"\")\r\n me.HideSpinner(L(\"DELETED_LINKS\", delCount), 2000);\r\n else\r\n me.HideSpinner(completeMsg, 2000);\r\n EnableOrDisableCheckAll();\r\n me.AjaxInProcess = false;\r\n //Отобразить сообщение\r\n if (obj.Warning) {\r\n var errorStr = JSON.parse(obj.Warning);\r\n if (errorStr.mainText) {\r\n var dialog = new WA.CMP.dialogs.MessageBox({ width: 600 });\r\n dialog.showWarning(errorStr.mainText, errorStr.additionalText.replace('\\n', '

'));\r\n }\r\n }\r\n }).fail(function (e) {\r\n me.AjaxInProcess = false;\r\n //Отобразить сообщение\r\n var dialog = new WA.CMP.dialogs.MessageBox({ width: 600 });\r\n dialog.showError(e);\r\n });\r\n }\r\n\r\n });\r\n } else {\r\n //me.ShowSpinner(L(\"OBJECTS_NOT_SELECTED\"), 2000);\r\n }\r\n }\r\n },\r\n\r\n DeleteLink: function (obj, callback, msg) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n this.DeleteLinks([{ ID: obj.id, Kind: obj.kind, CompCode: obj.refcode || '' }], callback, msg);\r\n },\r\n\r\n // Удаляет все ссылки из списка объектов.\r\n Clear: function (callback) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n var me = this;\r\n if (!me.AjaxInProcess) {\r\n me.AjaxInProcess = true;\r\n\r\n if (callback) {\r\n $.each(me.Values, function () { callback(this); });\r\n }\r\n\r\n me.Values = [];\r\n me.UpdateList(function () {\r\n me.AjaxInProcess = false;\r\n });\r\n }\r\n },\r\n\r\n // Добавляет выбранную запись справочника.\r\n // string input_id: ID контроля выбор из справочника.\r\n AddRefRec: function (input_id) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n var add_id;\r\n try {\r\n add_id = parseInt($(\"#hSelID_\" + input_id).val(), 10);\r\n } catch (e) {\r\n add_id = 0;\r\n }\r\n if (add_id) {\r\n var req = $(\"#\" + input_id).data();\r\n req.ReferenceSelectInstance.setValue();\r\n\r\n // Lysenko_YN: EnableSameRecords - если установлено в false, то одну и туже запись добавить несколько раз нельзя\r\n if ((me.EnableSameRecords === false) || (me.elem && (me.elem.attr('data-enableSameRecords') == 'false'))) {\r\n if ($.grep(me.Values, function (v) { return v.ID == add_id }).length == 0) {\r\n me.AddRefRecToList(add_id);\r\n }\r\n } else { //Шамов А.: По обращению 75532 - что бы можно было дабавлять одну и туже запись справочника несколько раз.\r\n me.AddRefRecToList(add_id);\r\n }\r\n }\r\n },\r\n\r\n //Добавляет запись в список\r\n AddRefRecToList: function (add_id) {\r\n var me = this;\r\n if (me.ReadOnly) return;\r\n\r\n var newObj = { ID: add_id, Kind: \"REF\", CompCode: me.RefCode };\r\n if (me.IsList) {\r\n me.Values.push(newObj);\r\n } else {\r\n me.Values = [newObj];\r\n };\r\n me.ShowSpinner(L(\"PLEASE_WAIT\"));\r\n me.UpdateList(function () {\r\n me.HideSpinner(\"\", 0);\r\n });\r\n },\r\n\r\n\r\n InitAttachments: function (CustomWorkID, CustomWorkType) {\r\n this.IsAttachments = true;\r\n this.CustomWorkID = CustomWorkID;\r\n this.CustomWorkType = CustomWorkType;\r\n var att = this.elem.parents('.attachments');\r\n var cont = att.parents('.attachments_container');\r\n\r\n var me = this;\r\n me.elem.find('div.ListRequisiteList')\r\n .attr('kind', 'att')\r\n .bind('contextmenu', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n ShowContextMenu($(this), {}, { 'left': e.pageX, 'top': e.pageY }, true);\r\n return false;\r\n });\r\n },\r\n\r\n SetCannotDelete: function (ids) {\r\n var me = this;\r\n $.each(ids, function () {\r\n var row = $('#' + this + '.folder_item:not(.cannot_delete)', me.elem);\r\n if (row.length)\r\n row.addClass('cannot_delete');\r\n });\r\n },\r\n\r\n //////////////// PRIVATE /////////////////////////////\r\n\r\n // Возвращает список выбранных объектов.\r\n // return object:\r\n // string .hrefs: ссылки в текстовом виде для вставки в буфер.\r\n // array .links: массив объектов для передачи сервису.\r\n GetSelectedLinks: function () {\r\n if (!this.IsList)\r\n return GetSelectedID(this.elem.find('.folder_item'));\r\n else {\r\n var items = this.elem.find('.folder_item.selected');\r\n var res = GetSelectedID(items);\r\n if (items.filter('.cannot_delete').length) {\r\n res.cannotDelete = true;\r\n }\r\n return res;\r\n }\r\n },\r\n\r\n\r\n GetLinks: function () {\r\n if (!this.IsList)\r\n return GetSelectedID(this.elem.find('.folder_item'));\r\n else {\r\n var items = this.elem.find('.folder_item');\r\n var res = GetSelectedID(items);\r\n if (items.filter('.cannot_delete').length) {\r\n res.cannotDelete = true;\r\n }\r\n return res;\r\n }\r\n },\r\n\r\n // Показывает информационное сообщение.\r\n // string msg: сообщение\r\n // [int delay]: если указано, то сообщение пропадет через delay миллисекунд\r\n ShowSpinner: function (msg, delay) {\r\n if (delay) {\r\n ShowTopSpinnerResult(msg, delay);\r\n } else {\r\n ShowTopSpinner(msg);\r\n }\r\n },\r\n\r\n // Показывает информационное сообщение о завершении действия. Если до этого панель спиннера была спрятана, нужно использовать ShowSpinner.\r\n // string msg: сообщение\r\n // int delay: задержка в миллисекундах\r\n HideSpinner: function (msg, delay) {\r\n HideTopSpinner(msg, delay);\r\n },\r\n\r\n // Обновляет список объектов с сервера. Также сохраняет Values в скрытое поле.\r\n // [function callback()]: вызывается после обновления списка\r\n UpdateList: function (callback) {\r\n var me = this;\r\n\r\n var valJSON = $.toJSON(me.Values);\r\n $('#' + me.id + \"_data\").val(valJSON);\r\n me.CallMyService(\"UpdateList\", {\r\n ClientID: me.id + \"_list\",\r\n ContentKind: me.ContentKind,\r\n RefCode: me.RefCode,\r\n IsList: me.IsList,\r\n ShowScrollBar: me.ShowScrollBar,\r\n Values: valJSON,\r\n EmptyText: me.EmptyText || '',\r\n IsShowActions: me.IsShowActions\r\n }, function (res) {\r\n me.RenderList(res);\r\n if (typeof callback !== \"undefined\")\r\n callback.call(me);\r\n });\r\n EnableOrDisableCheckAll();\r\n },\r\n\r\n RenderList: function (res) {\r\n var me = this;\r\n if (res.NewValues != null) {\r\n\r\n me.Values = $.parseJSON(res.NewValues);\r\n $('#' + me.id + \"_data\").val(res.NewValues);\r\n }\r\n var listContainer = $('#' + me.id + '_list');\r\n listContainer.empty();\r\n if (me.ShowScrollBar && me.Values.length > 3) {\r\n listContainer.addClass('ListRequisiteScroller');\r\n } else {\r\n listContainer.removeClass('ListRequisiteScroller');\r\n }\r\n if (res.HTML) listContainer.html(res.HTML);\r\n if (res.InitJS) eval(res.InitJS);\r\n $('#' + me.id + \"_chkAll\").removeAttr('checked').attr('title', L('SELECT_ALL'));\r\n try { // Только для мастеров!\r\n ProcessEmptyChecks();\r\n } catch (e) { }\r\n UpdateCopyPasteIcons(this.elem);\r\n me.elem.trigger('change');\r\n },\r\n\r\n // Вызывает метод сервиса ListRequisite.\r\n // string method: метод\r\n // [object params]: передаваемые параметры\r\n // [function callback(res)]: функция, вызываемая при успешном результате (result.Success == true)\r\n // object res: результат (result.Result)\r\n CallMyService: function (method, params, callback, errorCallback) {\r\n var me = this;\r\n CallService(\"/ListRequisite.asmx/\" + method, params, function (res) {\r\n if (res.Success) {\r\n if (typeof callback !== \"undefined\")\r\n callback.call(me, res.Result);\r\n }\r\n else {\r\n me.ShowSpinner(\"Во время операции произошла ошибка. Обратитесь к администратору.\", 5000);\r\n }\r\n }, errorCallback);\r\n },\r\n\r\n // Проверяет объект на соответстие списку.\r\n // object obj: объект\r\n // int obj.ID: ИД объекта\r\n // string obj.Kind: тип объекта\r\n // string obj.CompCode: код справочника\r\n // return bool: соответствует ли объект списку\r\n CheckObject: function (obj) {\r\n obj.Kind = obj.Kind.toUpperCase();\r\n if (this.ContentKind != \"ANY\" &&\r\n (obj.Kind != this.ContentKind ||\r\n obj.Kind == \"REF\" && obj.CompCode != this.RefCode)) {\r\n return false;\r\n }\r\n return ($.grep(this.Values, function (v) { return v.ID == obj.ID; }).length == 0);\r\n },\r\n\r\n // Добавляет объект в список.\r\n // object obj: объект\r\n // int obj.ID: ИД объекта\r\n // string obj.Kind: тип объекта\r\n // string obj.CompCode: код справочника\r\n AddObject: function (obj) {\r\n obj.Kind = obj.Kind.toUpperCase();\r\n var newObj = { ID: obj.ID, Kind: obj.Kind.toUpperCase(), CompCode: obj.CompCode };\r\n if (this.IsList) {\r\n this.Values.push(newObj);\r\n } else {\r\n this.Values = [newObj];\r\n }\r\n }\r\n };\r\n\r\n})();\r\n\r\n// Список валидаторов.\r\nvar g_EmptyCheckFunc = [];\r\n\r\n// Добавляет валидатор для контроля.\r\n// [jQuerySet control]: контроль, на события которого вешается операция проверки валидности.\r\n// function func(): функция-валидатор.\r\nfunction RegisterEmptyCheck(control, func) {\r\n g_EmptyCheckFunc.push(func);\r\n if (control) {\r\n var events = ['blur', 'click', 'change', 'keyup'];\r\n for (var i = 0; i < events.length; ++i) {\r\n try {\r\n control[events[i]](ProcessEmptyChecks);\r\n }\r\n catch (e) { }\r\n }\r\n }\r\n}\r\n\r\n// Выполняет валидацию контролей на странице.\r\nfunction ProcessEmptyChecks() {\r\n // При выборе из справочника значения еще может не быть. Например, такое бывает если выбираешь из \"Избранных и последних\" в выборе пользователей. #107229\r\n setTimeout(function () {\r\n var ok = true;\r\n for (var i = 0; i < g_EmptyCheckFunc.length; ++i) {\r\n if (!g_EmptyCheckFunc[i]()) {\r\n ok = false;\r\n break;\r\n }\r\n }\r\n $('.next_button').each(function () {\r\n var init;\r\n var disabled;\r\n init = $(this).data('initial_disabled');\r\n if (!init) {\r\n init = ($(this).attr('disabled') || $(this).attr('disabled') === \"\") ? \"y\" : \"n\";\r\n $(this).data('initial_disabled', init);\r\n }\r\n\r\n disabled = (ok ? (init == \"y\") : true);\r\n if (disabled) {\r\n $(this).attr('disabled', 'disabled').addClass(\"disabled\");\r\n } else {\r\n $(this).removeAttr('disabled').removeClass(\"disabled\");\r\n }\r\n });\r\n }, 100);\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\n\r\n/* = Карточка справочника ============================================================================================================================ */\r\n\r\nfunction scrollbarWidth() {\r\n var div = $('
');\r\n // Append our div, do our calculation and then remove it\r\n $('body:first').append(div);\r\n var w1 = $('div', div).innerWidth();\r\n div.css('overflow-y', 'scroll');\r\n var w2 = $('div', div).innerWidth();\r\n $(div).remove();\r\n return (w1 - w2);\r\n}\r\n\r\nfunction Reference_SelectRecord(el) {\r\n var chk = $(el);\r\n var tr = chk.parents('.List:first');\r\n if (chk.is(':checked')) {\r\n tr.addClass('selected');\r\n } else {\r\n tr.removeClass('selected');\r\n }\r\n updateChkAll(tr.parent(), $('#chkAll').addClass('notallyet'));\r\n UpdateCopyPasteIcons();\r\n}\r\n\r\n/* =================================================================================================================================================== */\r\n/* =================================================================================================================================================== */\r\n\r\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n// Поля поиска\r\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\nfunction InitSearchField() {\r\n $('.explorer-search-input').focus(function () {\r\n var me = $(this);\r\n if (!me.hasClass('Search_FilledField')) {\r\n // Стираем текущий текст, только если это общий поиск.\r\n if (me.attr(\"id\") == \"SrchQuickText\")\r\n me.val('');\r\n me.addClass('Search_FilledField');\r\n }\r\n })\r\n .blur(function () {\r\n var me = $(this);\r\n if (me.val() == '') {\r\n me.val(me.data('empty'));\r\n me.removeClass('Search_FilledField');\r\n }\r\n }).each(function () {\r\n var me = $(this);\r\n if (me.data('empty') && (me.val() == '' || me.val() == me.data('empty')))\r\n me.val(me.data('empty'));\r\n else\r\n me.addClass('Search_FilledField');\r\n });\r\n}\r\n\r\n//////////////////// Компонента \"список версий\" /////////////////////////////////////////\r\n\r\n// Генерирует функцию, осуществляющую загрузку с сервера списка версий.\r\n// controlID - id контроля списка\r\n// EDocID - id документа\r\n// ErrorClientID - id контроля Error\r\nfunction GenReloadVersionList(controlID, EDocID, ErrorClientID) {\r\n return function () {\r\n $.ajax({\r\n type: \"GET\",\r\n dataType: \"html\",\r\n url: format(\"DynControl.ashx?c=versions&EDocID={0}&ErrorClientID={1}\", EDocID, ErrorClientID),\r\n success: function (res) {\r\n if (!CheckForLoginPage(res)) {\r\n $('#' + controlID).html(res);\r\n HideTopSpinner();\r\n }\r\n },\r\n error: function (err) {\r\n HideTopSpinner(err, 5000);\r\n },\r\n cache: false\r\n });\r\n };\r\n}\r\n\r\n// Показывает дерево \"Папки\" в левой панели.\r\nfunction ShowFolderTree(el) {\r\n ClearSelectedElements(el);\r\n SetElementToolBar(el);\r\n $('#Tree').show().find(\".FolderTreeDiv\").show();\r\n if (window.UpdateFolderTreeScroll) UpdateFolderTreeScroll();\r\n}\r\n\r\n//Определяет, является ли папка targetFolder вложенной относительно sourceFolder (targetFolder и sourceFolder = fpath из url = id li)\r\nfunction isChildFolder(sourceFolderPath, targetFolderPath, currentFolderPath) {\r\n /*\r\n tp = \"1-2-3-4-5-\";\r\n sp = \"1-2-\";\r\n tp.split(sp).indexOf(\"\") == 0; => isChildFolder\r\n */\r\n var arr = targetFolderPath.split(sourceFolderPath);\r\n return (arr.length > 1 && arr.indexOf(\"\") == 1 && currentFolderPath != sourceFolderPath);\r\n}\r\n\r\n// определяет, что dragEl - корневая папка (Favorites, Outbox, Inbox, Common)\r\nfunction isRootFolder(dragEl) {\r\n return ($(dragEl).parent().parent().parent(\"ul.treeview\").length == 1);\r\n}\r\n\r\n// Инициализирует меню по правой кнопке в компоненте для построения связанных документов/записей справочника.\r\nfunction InitContextMenuForBound(trs) {\r\n if (!trs) trs = $('.List');\r\n trs\r\n .unbind('contextmenu.bound').bind('contextmenu.bound', function (e) {\r\n ShowContextMenu($(this).children(), {}, { 'left': e.pageX, 'top': e.pageY });\r\n return false;\r\n });\r\n}\r\n\r\n// Инициализирует реквизит типа \"флажок\".\r\nfunction InitCheckboxRequisite(el) {\r\n //setTimeout(function () {\r\n var displayControl = $(format('#{0}_display', el.attr('id')), el);\r\n var valueControl = $(format('#{0}_value', el.attr('id')), el);\r\n el.data('requisite').val = function (value) {\r\n if (typeof value !== 'undefined') {\r\n displayControl.prop('checked', value == el.data('requisite').yes);\r\n valueControl.val(value);\r\n } else {\r\n return valueControl.val();\r\n }\r\n };\r\n displayControl.bind('click change', function () {\r\n if (displayControl.is(':checked')) {\r\n valueControl.val(el.data('requisite').yes);\r\n } else {\r\n valueControl.val(el.data('requisite').no);\r\n }\r\n });\r\n //}, 0);\r\n}\r\n\r\nfunction getHintDataObj(el) {\r\n return (typeof el.data(\"data-hint\") == 'undefined' ? eval(\"(\" + el.attr(\"data-hint\") + \")\") : el.data(\"data-hint\")); //FIXME: eval\r\n}\r\n\r\n\r\nlet g_addinfo = [];\r\n/**\r\n* Навешивает подсказку по доп. реквизитам на элемент.\r\n*\r\n* @function AttachTooltipToElement\r\n* @param {Object} el - текущий элемент.\r\n* @param {Object} ev - событие.\r\n* @param {boolean} [opt_showAfterAttach = true] - признак показыватьли после привязки.\r\n* @param {Object} [opt_showOptions = {}] - параметры показа.\r\n* @param {Object} [opt_positionOptions = {}] - позиция.\r\n*/\r\nfunction AttachTooltipToElement(el, ev, opt_showAfterAttach = true, opt_showOptions = {}, opt_positionOptions = {}) {\r\n // Получение содержимого подсказки.\r\n const getContent = function (el, callback) {\r\n const dataobject = getHintDataObj(el); //есть два поля: id и compcode\r\n if (dataobject.id && dataobject.compcode) {\r\n const params = {\r\n RefCode: dataobject.compcode,\r\n RecID: dataobject.id,\r\n };\r\n CallService('/Reference.asmx/GetAdditionalInfoForAllRecords', params, res => {\r\n if (res.Success) {\r\n el.qtip(\"enable\");\r\n el.qtip.zindex = 130000;\r\n\r\n const uniqueIndex = `${dataobject.compcode}_${dataobject.id}`;\r\n g_addinfo[uniqueIndex] = res.Result;\r\n\r\n if (res.Result[0].Requisites.length) {\r\n GenerateAdditionalInfoTooltipHtml(res.Result[0], 0, res.Result.length).done((html) => {\r\n if (html) {\r\n if (callback) callback(html);\r\n } else {\r\n el.qtip(\"disable\");\r\n }\r\n });\r\n }\r\n } else {\r\n el.qtip(\"disable\");\r\n }\r\n });\r\n }\r\n };\r\n\r\n // Если уже навесили подсказку, больше этого не делаем.\r\n if (!el.hasClass('hintInit')) {\r\n getContent(el, function (hintContent) {\r\n hintContent = $(hintContent);\r\n // Событие по крестику для закрытия хинта.\r\n hintContent.find('i').bind('click.hint', function () {\r\n el.qtip('hide', ev);\r\n });\r\n el.addClass('hintInit').qtip('destroy').qtip({\r\n style: { classes: \"ui-tooltip-light ui-tooltip-shadow ui-tooltip-rounded\" },\r\n show: $.extend({\r\n effect: false,\r\n solo: true,\r\n delay: 800,\r\n }, opt_showOptions),\r\n content: { text: hintContent },\r\n hide: {\r\n effect: false,\r\n fixed: true, \r\n delay: 100,\r\n leave: false,\r\n },\r\n position: $.extend({\r\n viewport: $(window),\r\n effect: false,\r\n target: 'mouse',\r\n adjust: {\r\n mouse: false,\r\n x: 15,\r\n y: 0,\r\n },\r\n my: 'bottom left',\r\n at: 'bottom left',\r\n }, opt_positionOptions),\r\n events: {\r\n show: function (event, api) {\r\n if (!el.is(':visible')) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n });\r\n if (opt_showAfterAttach) el.qtip('show', ev);\r\n });\r\n }\r\n};\r\n\r\nlet hintTimeout;\r\n/**\r\n* Функция для инициализации подсказок по допреквизитам.\r\n*\r\n* @function InitAdditionalInfoTooltip\r\n* @param {Object} el - текущий элемент.\r\n* @param {number} [opt_position] - позиция.\r\n*/\r\nfunction InitAdditionalInfoTooltip(el, opt_position) {\r\n const me = el;\r\n if (!$.ipad) {\r\n me.unbind('mouseenter.hint').bind('mouseenter.hint', function (ev) {\r\n var $this = $(this);\r\n if (hintTimeout) clearTimeout(hintTimeout);\r\n hintTimeout = setTimeout(function () {\r\n AttachTooltipToElement($this, ev, true, undefined, opt_position);\r\n }, 800);\r\n }).unbind('mouseleave.hint').bind('mouseleave.hint', function () {\r\n if (hintTimeout) clearTimeout(hintTimeout);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n* Генерирует подсказку к объекту системы.\r\n*\r\n* @function GenerateAdditionalInfoTooltipHtml\r\n* @param hint - информация для подсказки.\r\n* @param page - номер страницы в подсказке.\r\n* @param pagesCount - всего страниц.\r\n* @return html шаблон подсказки.\r\n*/\r\nfunction GenerateAdditionalInfoTooltipHtml(hint, page, pagesCount) {\r\n let reqs = [];\r\n let btnPrevClass = '';\r\n let btnNextClass = '';\r\n for (let i = 0; i < hint.Requisites.length; i++) {\r\n reqs.push({\r\n Class: (i === 0 ? 'first' : ''),\r\n Caption: (hint.Requisites[i].Caption || ''),\r\n Href: hint.Requisites[i].Href,\r\n Text: hint.Requisites[i].Text,\r\n HasImage: (hint.Requisites[i].Href !== null),\r\n });\r\n }\r\n\r\n if ((page === 0) && (pagesCount > 1)) {\r\n btnPrevClass = 'disabled';\r\n }\r\n\r\n if (page === pagesCount-1) {\r\n btnNextClass = 'disabled';\r\n }\r\n\r\n const params = WA.TMPL.prepare({\r\n HasImage: !!hint.Image,\r\n ImageSRC: hint.Image,\r\n Style: (hint.Image ? 'style=\"left:120px;\"' : ''),\r\n Requisites: reqs,\r\n PageIndex: page,\r\n ButtonPrevClass: btnPrevClass,\r\n ButtonNextClass: btnNextClass,\r\n HasButtons: (pagesCount > 1),\r\n });\r\n return WA.TMPL.render('referenceRecords/objectTooltip.html', params);\r\n}\r\n\r\n/**\r\n* Получение предыдущей подсказки в информации об объекте.\r\n*\r\n* @function changeInfo\r\n* @param {Object} btn - текущая кнопка.\r\n* @param {boolean} isPrev - TRUE - если текущая кнопка это кнопка 'Назад', иначе - FALSE.\r\n*/\r\nfunction changeInfo(btn, isPrev) {\r\n const jCurrentButton = $(btn);\r\n if (jCurrentButton.hasClass('disabled')) {\r\n return;\r\n }\r\n\r\n let index = parseInt(jCurrentButton.data('pageindex'));\r\n\r\n if (isPrev) {\r\n index--;\r\n } else {\r\n index++;\r\n }\r\n \r\n const jQtip = jCurrentButton.parents('.qtip');\r\n const currentButtonHintSelector = `[aria-describedby='${jQtip[0].id}']`;\r\n const jCurrentButtonHint = $(currentButtonHintSelector);\r\n let dataobject = getHintDataObj(jCurrentButtonHint);\r\n const uniqueIndex = `${dataobject.compcode}_${dataobject.id}`;\r\n const info = g_addinfo[uniqueIndex];\r\n\r\n GenerateAdditionalInfoTooltipHtml(info[index], index, info.length).done(html => {\r\n if (html) {\r\n //отрендерить\r\n jCurrentButtonHint.qtip('option', 'content.text', html);\r\n }\r\n });\r\n}","/* Выбор из справочника */\r\n(function ($) {\r\n var lastFocusedInputId = null;\r\n \r\n var rs = function (inp, o, img) {\r\n this.init(inp, o, img);\r\n };\r\n rs.prototype = {\r\n // HTML элементы.\r\n inp: null, // главный input\r\n container: null, // главный контейнерю\r\n results: null, // результаты поиска.\r\n table: null,\r\n img: null,\r\n title: null,\r\n footer: null,\r\n hidd: null,\r\n inpParent: null,\r\n selectedItems: null,\r\n selectedItemsCont: null,\r\n fakeInp: null,\r\n\r\n contId: '',\r\n\r\n // Таймауты.\r\n close: null, // на скрытие\r\n timeout: null, // на поиск\r\n spinner_timeout: null, // на спинер\r\n deleteItemsTimeout: null,\r\n\r\n // Настройка.\r\n url: null, // url for ajax request\r\n refcodes: {},\r\n refcodesCount: 0, //у объекта получить length нельзя.\r\n selectedRefCode: null,\r\n selectedRefIsClosed: false,\r\n extraParams: null,\r\n max: 25, // max result rows\r\n delay: 400, // for search\r\n minChars: 1,\r\n mustMatch: false,\r\n showNoMatchText: true,\r\n cellIDIndex: 0,\r\n cellToInput: 2,\r\n multiselect: false,\r\n referenceCodesAndReqNamesInDetailSection: null,\r\n allowlike: true,\r\n useadditional: true,\r\n isCustomSelect: false,\r\n selected: false,\r\n currentPage: 1,\r\n maxPages: 1,\r\n mainReferenceCode: '',\r\n dataProvider: null,\r\n sendQueryOnlyOnEnter: false,\r\n\r\n suggestInProcess: false,\r\n suggestLastMode: 'show',\r\n NoMatchText: L(\"NO_RECORDS_FOUND\"),\r\n CancelText: L(\"CANCEL_ACTION\"),\r\n SelectText: L(\"SELECT_X_FROM_Y_TEXT\"),\r\n TitleText: L(\"CHOOSE_REFERENCE\"),\r\n\r\n init: function (inp, options, img) {\r\n var self = $.extend(this, options);\r\n self.inp = $(inp);\r\n // Проверим проинициализирован ли контроль.\r\n if (self.inp.hasClass('rs_InitComplete')) return;\r\n if (self.isCustomSelect) self.inp.addClass('rs_custom');\r\n if (self.color) {\r\n self.inp.css('color', self.color); \r\n }\r\n \r\n self.inp\r\n .addClass('rs_input')\r\n .data('selected', self.selected)\r\n .bind('focus.refselect', function () {\r\n // При фокусе скрываем все выпадающие списки записей всех реквизитов \"Выбор из справочника\".\r\n if (self.inp.attr('id') != lastFocusedInputId) {\r\n // Закрыть надо предыдущий, а не текущий.\r\n $('#' + lastFocusedInputId).HideContainer();\r\n };\r\n\r\n self.fakeInp.addClass('refselect-input_focused');\r\n self._hidePlaceholder();\r\n\r\n lastFocusedInputId = self.inp.attr('id');\r\n })\r\n .bind('blur.refselect', function () {\r\n // Если это инициализация значений или потеря фокуса, то сместим выбранные записи в самое лево, что бы был виден первый элемент.\r\n self.changeInpWidthAndPadding(true);\r\n self.fakeInp.removeClass('refselect-input_focused');\r\n if (!self.hidd.val() && !self.inp.val()) self._showPlaceholder();\r\n })\r\n .bind('SetSelected', function (e, v) {\r\n self.inp.data('selected', v);\r\n self.inp.trigger('onSelected');\r\n self._hidePlaceholder();\r\n })\r\n .bind('ReplaceSelectedItem', function (e, oldID, newValues, onlyLast) {\r\n self.replaceSelectedItem(oldID, newValues, onlyLast);\r\n self._hidePlaceholder();\r\n })\r\n .bind('Clear', function () {\r\n self.deleteAllItems();\r\n self._showPlaceholder();\r\n })\r\n .bind('HideContainer', function () {\r\n self.hideContainer();\r\n })\r\n .bind('SetValue', function (e, newValue, needTriggerResult) {\r\n self.setValue(newValue, needTriggerResult);\r\n self._hidePlaceholder();\r\n })\r\n .bind('SetValues', function (e, newValues, needTriggerResult) {\r\n self.setValues(newValues, needTriggerResult);\r\n self._hidePlaceholder();\r\n })\r\n .bind('SetDisabled', function (e, v) {\r\n if (!!v) {\r\n self.inp.attr('readonly', 'readonly').addClass('Req_Disabled').attr('tabindex', -1);\r\n self.inpParent.find('.fakeInput').addClass('Req_Disabled');\r\n self.selectedItems.find('span').addClass('Req_Disabled');\r\n if (self.img.length) {\r\n self.img.addClass('Req_Icon_Disabled');\r\n }\r\n } else {\r\n self.inp.removeAttr('readonly').removeClass(\"Req_Disabled\").attr('tabindex', 0);\r\n self.inpParent.find('.fakeInput').removeClass(\"Req_Disabled\");\r\n self.selectedItems.find('span').removeClass(\"Req_Disabled\");\r\n if (self.img.length) {\r\n self.img.removeClass(\"Req_Icon_Disabled\");\r\n }\r\n };\r\n\r\n // Событие изменения доступности\r\n self.inp.trigger('onAvailabilityChange', v);\r\n });\r\n\r\n self.inpParent = self.inp.parent();\r\n\r\n self.inp.bind('keydown', self, self.process);\r\n // хак для планшетов: создаем кнопку, навешиваем на нее клик, в клике ставим фокус на поле ввода\r\n // вызываем клик у кнопки при клике на див в котором находится поле ввода\r\n if ($.ipad || WA.ENV.isAndroid()) {\r\n if ($('#focusBtn' + self.inp.attr('id')).length === 0) {\r\n var btn = $('')\r\n .unbind('click')\r\n .click(function () {\r\n self.inp.focus();\r\n });\r\n\r\n $('body').append(btn);\r\n } else {\r\n $('#focusBtn' + self.inp.attr('id')).unbind('click').click(function () {\r\n self.inp.focus();\r\n });\r\n }\r\n\r\n self.inp.parent().click(function () {\r\n $('#focusBtn' + self.inp.attr('id')).click();\r\n });\r\n }\r\n\r\n\r\n if (self.allowlike) {\r\n if ($.ipad && WA.ENV.isAndroid()) {\r\n self.oldv = self.inp.val();\r\n var pollTimer = null;\r\n var interval = 500;\r\n function pollInputChanged() {\r\n if (!self.inp.is(':focus')) return;\r\n\r\n try {\r\n self.onInputChanged(self.sendQueryOnlyOnEnter);\r\n self.changeInpWidthAndPadding();\r\n pollTimer = setTimeout(pollInputChanged, interval);\r\n } catch (_) { }\r\n }\r\n self.inp.bind('focus', function () {\r\n pollTimer = setTimeout(pollInputChanged, interval);\r\n }).bind('blur', function () {\r\n if (pollTimer) clearTimeout(pollTimer);\r\n //self.inp.val(''); закомментил тк при при смене справочника в выпадающем списке не подгружались записи по фильтру\r\n });\r\n };\r\n } else {\r\n self.inp.bind('change', function () {\r\n // Передаем значение введенное пользователем со знаком $, что бы отличить от выбранного из справочника.\r\n self.hidd.val('$' + $(this).val());\r\n });\r\n };\r\n\r\n if (img != null) {\r\n self.img = $(img)\r\n .addClass('rs_img')\r\n .bind('click touchstart', function (ev) {\r\n // Помечаем выделенным при нажатии на \"...\", что бы он не закрывался раньше времени (на событии onFocus, когда lastFocusedInputId = null).\r\n lastFocusedInputId = self.inp.attr('id');\r\n return self.onImgClick(ev);\r\n });\r\n }\r\n\r\n // Скрытие вариантов при click на любое другое место.\r\n $('html').bind('click.refselect', function (ev) {\r\n var t = $(ev.target);\r\n if (t && t.length > 0) {\r\n var className = t[0].className;\r\n if (className && className.baseVal) {\r\n className = className.baseVal;\r\n }\r\n if (typeof className === 'string' && className.indexOf('rs_') === -1 && className.indexOf('-icon') === -1) {\r\n if (self.table.find(\"tr\").length === 1 && self.inp.val() !== \"\") {\r\n self.select(true);\r\n }\r\n if (self.container.is(':visible')) self.hideContainer();\r\n }\r\n } else {\r\n if (self.container.is(':visible')) self.hideContainer();\r\n }\r\n });\r\n\r\n self.contId = 'rscont' + (Math.random() * 100 | 0);\r\n self.container = $('
').appendTo(\"body\");\r\n self.results = $('
').appendTo(self.container);\r\n self.title = $('
').prependTo(self.container);\r\n self.table = $('
').appendTo(self.results.find('#loller'));\r\n self.footer = $('
').appendTo(self.container);\r\n\r\n if (self.multiselect) {\r\n self.table.addClass('rs_multiselect_table');\r\n }\r\n\r\n // Контейнер что бы выбранные элементы не налезали на \"...\".\r\n self.selectedItemsCont = $('
');\r\n self.selectedItems = $('
');\r\n\r\n self.selectedItemsCont.bind('click.refselect', function () {\r\n // Перемещаем input в конец.\r\n self.selectedItems.children('span:last').after(self.inp);\r\n self.changeInpWidthAndPadding();\r\n setTimeout(function () { //для IE\r\n self.inp.focus();\r\n }, 100);\r\n });\r\n if (inp.hasClass('Req_Disabled')) {\r\n self.inp.SetDisabled();\r\n }\r\n\r\n self.selectedItemsCont.append(self.selectedItems);\r\n self.inpParent.prepend(self.selectedItemsCont);\r\n\r\n self.moveInputToSelecetedItem();\r\n\r\n self.initSelecetedItems();\r\n\r\n if (self.hidd.val()) self._hidePlaceholder();\r\n\r\n // Инициализация закончена.\r\n self.inp.addClass('rs_InitComplete');\r\n // Подобрать ширину для значения реквизита\r\n $(function () { self.changeInpWidthAndPadding(); });\r\n },\r\n\r\n onImgClick: function (ev) {\r\n var self = this;\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (!self.inp.attr('readonly') && !self.inp.attr('disabled')) {\r\n self.container.hide();\r\n self.table.empty().removeData('refcode');\r\n self.currentPage = 1;\r\n self.clearBlurTimeout();\r\n self.suggestLastMode = 'show_all';\r\n self.suggest(function () {\r\n self.results.scrollTop(0);\r\n });\r\n }\r\n },\r\n\r\n isReadonly: function () {\r\n var self = this;\r\n return (self.inp.attr('readonly'));\r\n },\r\n\r\n initSelecetedItems: function (_ids, _names) {\r\n var self = this;\r\n\r\n var hiddVals = self.hidd.val();\r\n var inpVals = self.inp.val();\r\n\r\n var ids = _ids || (hiddVals ? hiddVals.split(';') : []);\r\n var names = _names || (inpVals ? inpVals.split(';') : []);\r\n\r\n var html = '';\r\n for (var i = 0; i < names.length; i++) {\r\n var val = [];\r\n val[self.cellIDIndex] = $.trim(ids[i]);\r\n val[self.cellToInput] = $.trim(names[i]);\r\n if (val[self.cellIDIndex] != '') {\r\n html += self.createNewSelecetedItemHTML(val);\r\n }\r\n }\r\n //TODO Шамов А.: Когда-нибудь переделать на setValues.\r\n self.createNewSelecetedItem(null, $(html));\r\n\r\n // Если это инициализация значений или потеря фокуса, то сместим выбранные записи в самое лево, что бы был виден первый элемент.\r\n setTimeout(function () { // CardForm инициализирует значения немного позже, поэтому для него setTimeout.\r\n self.changeInpWidthAndPadding(true);\r\n }, 150);\r\n\r\n //Навешиваем событие на resize окна, что бы изменялось положение выбранных записей.\r\n if (!self.multi_windowResizeInit) {\r\n var rsTimeout;\r\n $(window).bind('resize.refselect', function () {\r\n if (rsTimeout) clearTimeout(rsTimeout); // нужен что бы часто не рассчитывать.\r\n rsTimeout = setTimeout(function () {\r\n self.changeInpWidthAndPadding();\r\n }, 100);\r\n });\r\n self.multi_windowResizeInit = true;\r\n }\r\n },\r\n\r\n // Загрузка нужной страницы.\r\n loadPage: function (delta) {\r\n var self = this;\r\n var p = self.currentPage;\r\n if (delta == -2) {\r\n p = 1;\r\n } else if (delta == -1) {\r\n p -= 1;\r\n } else if (delta == 1) {\r\n p += 1;\r\n } else if (delta == 2) {\r\n p = self.maxPages;\r\n }\r\n\r\n if (p < 1) p = 1;\r\n if (p > self.maxPages) p = self.maxPages;\r\n\r\n if (self.currentPage != p) {\r\n self.currentPage = p;\r\n self.suggest();\r\n }\r\n },\r\n\r\n // Удаление таймаута на событии onblur главного inputa.\r\n clearBlurTimeout: function () {\r\n var self = this;\r\n clearTimeout(self.close);\r\n self.inp.focus();\r\n },\r\n\r\n onInputChanged: function (disableSendQuery) {\r\n var self = this;\r\n setTimeout(function () { //эта функция вызывается в keypress и что бы в input появился символ, который нажали, делаем этот setTimeout.\r\n var v = $.trim(self.inp.val());\r\n if (v !== self.oldv) {\r\n // Сохраняем предыдущее значение только если будем отправлять запрос.\r\n if (!disableSendQuery) {\r\n self.oldv = v;\r\n }\r\n var check = v;\r\n check = check.replace(/ /g, \"\");\r\n var len = check.length;\r\n if (len >= self.minChars) {\r\n if (self.timeout) clearTimeout(self.timeout);\r\n self.timeout = setTimeout(function () {\r\n // Если быстро ввести и удалить символ отображалась выпадайка со всеми записями,\r\n // но терялся констекст и она была в верхнем левом углу, поэтому если в инпуте ничего не введено выпадайку не показываем.\r\n if (self.oldv.length > 0) {\r\n self.suggestLastMode = 'show';\r\n self.suggest(function () {\r\n self.results.scrollTop(0);\r\n }, disableSendQuery);\r\n };\r\n }, self.delay);\r\n } else {\r\n if (v == '' && !self.multiselect) {\r\n self.selectEmpty(true);\r\n }\r\n self.hideContainer();\r\n };\r\n };\r\n }, 0);\r\n },\r\n\r\n // Перемещение по справочникам.\r\n moveReference: function (d) {\r\n var self = this;\r\n var refCaptions = $.merge(self.title.children(), self.footer.children());\r\n var selected = refCaptions.filter('.selected');\r\n if (d == 0) {\r\n return selected;\r\n } else {\r\n var nextSelIndex = refCaptions.index(selected.removeClass('selected').get(0)) + d;\r\n if (nextSelIndex == -1) {\r\n nextSelIndex = refCaptions.length - 1;\r\n }\r\n if (nextSelIndex == refCaptions.length) {\r\n nextSelIndex = 0;\r\n }\r\n return $(refCaptions.get(nextSelIndex)).addClass('selected');\r\n }\r\n },\r\n\r\n // Обработка нажатий на клавищи.\r\n process: function (e) {\r\n var self = e.data;\r\n\r\n if (self.inp.attr('readonly') || self.inp.attr('disabled')) return;\r\n\r\n if (!(/^13$|^9$/.test(e.keyCode)) && !self.container.is(':visible')) {\r\n self.inp.data('selected', 'false'); // Значение изменилось.\r\n }\r\n\r\n //alt+down для раскрытия полного списка.\r\n if (e.altKey && e.keyCode == 40 && $.trim(self.inp.val()) == '' && !self.container.is(':visible')) {\r\n self.onImgClick(e);\r\n }\r\n\r\n\r\n // Влево/вправо при множественном выборе\r\n if (self.multiselect && /^46$|^36$|^35$|^37$|^39$/.test(e.keyCode) && $.trim(self.inp.val()) == '') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n switch (e.keyCode) {\r\n case 46: //del\r\n //Если пользователь удаляет много элементов подрят, то удалим все элементы сразу.\r\n if (!self.checkLongDeletion()) { \r\n self.deleteItems(self.inp.next());\r\n } else {\r\n self.deleteAllItems();\r\n };\r\n break;\r\n case 36: //home\r\n self.multiLeft(true);\r\n break;\r\n case 35: //end\r\n self.multiRight(true);\r\n break;\r\n case 37: //left\r\n // Выпадающиего списка нет, то переходим между элементами.\r\n if (!self.container.is(':visible')) {\r\n self.multiLeft();\r\n }\r\n break;\r\n case 39: //right\r\n if (!self.container.is(':visible')) {\r\n self.multiRight();\r\n }\r\n break;\r\n };\r\n };\r\n\r\n // Скрытие/раскрытие записей справочника.\r\n if (self.refcodesCount > 1 && /^37$|^39$/.test(e.keyCode) && self.container.is(':visible')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n //left, right\r\n if (e.keyCode == 37 || e.keyCode == 39) {\r\n self.selectReference(self.moveReference(0));\r\n }\r\n }\r\n\r\n // Backspace работает всегда\r\n if (/^8$/.test(e.keyCode) && self.inp.val() == '') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n //Если пользователь удаляет много элементов подрят, то удалим все элементы сразу.\r\n if (!self.checkLongDeletion()) { \r\n self.deleteItems(self.inp.prev());\r\n } else {\r\n self.deleteAllItems();\r\n };\r\n }\r\n\r\n if ((/^27$|^38$|^40$/.test(e.keyCode) && (self.container.is(':visible') || self.suggestInProcess)) || (/^13$|^9$/.test(e.keyCode) && self.container.is(':visible') && self.get())) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n switch (e.keyCode) {\r\n case 38: //up\r\n if (self.table.is(':visible')) {\r\n self.prev();\r\n } else {\r\n // Таблица с записями скрыта, значит выбираем справочник.\r\n self.moveReference(-1);\r\n }\r\n break;\r\n case 40: //down\r\n if (self.table.is(':visible')) {\r\n self.next();\r\n } else {\r\n // Таблица с записями скрыта, значит выбираем справочник.\r\n self.moveReference(1);\r\n }\r\n break;\r\n case 9: //tab\r\n case 13: //return\r\n if (self.table.is(':visible')) {\r\n // Выбор записи справочника.\r\n var selected_row = self.get();\r\n if (selected_row != null) {\r\n selected_row.click();\r\n } else {\r\n self.select();\r\n }\r\n } else {\r\n // Выбор справочника.\r\n self.selectReference(self.moveReference(0));\r\n }\r\n break;\r\n case 27: // escape\r\n self.hideContainer();\r\n break;\r\n }\r\n } else {\r\n if (e.keyCode !== 9 && self.allowlike) {\r\n\r\n //Если включен режим поиска только при нажатии на Enter, то проверяем кнопку.\r\n var disableSendQuery = false;\r\n if (self.sendQueryOnlyOnEnter) {\r\n\r\n // Если продолжили набирать, то скрываем предыдущие результаты.\r\n self._hideAndResetContainer();\r\n\r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n disableSendQuery = false;\r\n } else {\r\n disableSendQuery = true;\r\n }\r\n }\r\n\r\n self.onInputChanged(disableSendQuery);\r\n }\r\n }\r\n },\r\n\r\n // Проверяет долгое нажатие на кнопку Del/Backspace.\r\n checkLongDeletion: function () {\r\n var self = this;\r\n\r\n // Запомним время первого нажатия кнопки удалить (Del/Backspace).\r\n if (self._startDeleteTime === null) {\r\n self._startDeleteTime = $.now();\r\n };\r\n\r\n //Если прошло 1.5 с. с момента первого нажатия, то это долгое нажатие кнопки удалить.\r\n if (($.now() - self._startDeleteTime) > 1500) {\r\n return true;\r\n };\r\n\r\n // Таймер для сброса времени первого нажатия кнопки удалить.\r\n if (self._deleteTimeout) clearTimeout(self._deleteTimeout);\r\n self._deleteTimeout = setTimeout(function () {\r\n self._startDeleteTime = null;\r\n }, 300);\r\n\r\n //Не должгое нажатие.\r\n return false;\r\n },\r\n _startDeleteTime: null,\r\n _deleteTimeout: null,\r\n\r\n\r\n // Получение текущей выделенной строки таблицы.\r\n get: function () {\r\n var self = this;\r\n return self.table.find('.rs_tr_over');\r\n },\r\n\r\n // Переход на предыдущую строку\r\n prev: function () {\r\n this.move(-1);\r\n },\r\n\r\n // Переход на следующую строку\r\n next: function () {\r\n this.move(1);\r\n },\r\n\r\n move: function (delta) {\r\n var self = this;\r\n var current = self.get();\r\n var next = (delta > 0 ? current.next() : current.prev());\r\n var overed;\r\n if (current.length > 0) {\r\n if (next.length > 0) {\r\n current.parent().find('.rs_tr_over').removeClass('rs_tr_over');\r\n overed = next.addClass('rs_tr_over');\r\n }\r\n } else {\r\n overed = self.table.find('tr:first').addClass('rs_tr_over');\r\n }\r\n self.scrollToOver(overed);\r\n },\r\n\r\n scrollToOver: function (overed) {\r\n var self = this;\r\n if (overed && overed.length > 0) {\r\n var overTop = overed.position().top;\r\n if ((overTop + overed.height()) > self.results.height()) {\r\n self.results.scrollTop(self.results.scrollTop() + overTop - overed.height());\r\n }\r\n if (overTop < 0) {\r\n self.results.scrollTop(self.results.scrollTop() + overTop + overed.height() - self.results.height());\r\n }\r\n }\r\n },\r\n\r\n //Получаем все выбранные записи.\r\n getValues: function () {\r\n var self = this;\r\n var v = [];\r\n if (self.selectedItems !== null) {\r\n self.selectedItems.children('span').each(function () {\r\n var item = $(this);\r\n var refcode;\r\n var id = '' + item.data('id');\r\n var idParts = id.split(':');\r\n if (idParts.length == 2) {\r\n refcode = idParts[0];\r\n id = idParts[1];\r\n } else {\r\n refcode = self.getFirstRefCode();\r\n };\r\n v.push({\r\n groupcode: refcode,\r\n id: id,\r\n name: '' + item.data('text')\r\n });\r\n });\r\n }\r\n return v;\r\n },\r\n\r\n // Устанавливает 1 значение.\r\n setValue: function (newValue, needTriggerResult) {\r\n var self = this;\r\n var oldHiddVal = self.hidd.val();\r\n\r\n // Если не множественный выбор, то очищаем предыдущее значение.\r\n try {\r\n if (!self.multiselect) {\r\n self.deleteAllItems(false);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (newValue != null) {\r\n // Создаем новый выбранный элемент.\r\n self.createNewSelecetedItem(newValue);\r\n }\r\n\r\n if (!!needTriggerResult) {\r\n if (self.allowlike) {\r\n self.triggerResultEvent(oldHiddVal, newValue);\r\n } else {\r\n self.inp.trigger('changeOnSelectValue', [newValue]);\r\n }\r\n }\r\n\r\n self.inp.data('selected', '' + (newValue != null));\r\n },\r\n\r\n // Устанавливает множество значений. Формат [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...]\r\n setValues: function (newValues, needTriggerResult) {\r\n var self = this;\r\n if (self.multiselect) {\r\n var oldHiddVal = self.hidd.val();\r\n\r\n self.deleteAllItems(false);\r\n\r\n var html = '';\r\n for (var i = 0; i < newValues.length; i++) {\r\n var val = [];\r\n val[self.cellIDIndex] = $.trim(newValues[i].groupcode + ':' + newValues[i].id);\r\n val[self.cellToInput] = $.trim(newValues[i].name);\r\n if (val[self.cellIDIndex] != '') {\r\n //Для увеличения скорости работы не вызываем setValue.\r\n html += self.createNewSelecetedItemHTML(val);\r\n }\r\n }\r\n self.createNewSelecetedItem(null, $(html));\r\n if (!!needTriggerResult) {\r\n self.triggerResultEvent(oldHiddVal, newValues);\r\n }\r\n\r\n self.inp.data('selected', '' + (html != ''));\r\n }\r\n },\r\n\r\n triggerResultEvent: function (oldHiddVal, val) {\r\n var self = this;\r\n if (self.hidd.val() != oldHiddVal) {\r\n if (self.multiselect) {\r\n //Шамов А.: Не вызываем триггер result во множественном выборе, т.к. оно перезапишет значение в скрытом поле.\r\n self.inp.trigger(\"resultMulti\", [val, self.getValues()]);\r\n } else {\r\n self.inp.trigger(\"result\", [val]);\r\n }\r\n }\r\n },\r\n\r\n // Значение выбранно.\r\n select: function (isOne, el) {\r\n var self = this;\r\n var selected_row = el ? el : (isOne ? self.table.find('tr') : self.table.find('.rs_tr_over'));\r\n if (selected_row != null) {\r\n var data = selected_row.data('rowData') || null;\r\n if (data !== null) {\r\n var val = [data.id, data.encodedTitle, data.title, data.leadingRequisitesValue];\r\n self.inp.val(val[self.cellToInput]);\r\n val[0] = (self.isCustomSelect || self.refcodesCount > 1 || self.multiselect ? (self.selectedRefCode + ':') : '') + val[0]; //добавляем код выбранного справочника.\r\n\r\n self.setValue(val, true);\r\n\r\n // Если оставить этот setTimeout то в детальных раздела прохо работает клавиатурная навигация.\r\n if (WA.ENV.browser.name === 'IE' && self.inp.parents('.slick-cell').length === 0) {\r\n // Для IE иначе после выбора нельзя ничего написать (#103690).\r\n setTimeout(function () {\r\n self.inp.blur();\r\n self.inp.focus();\r\n }, 100);\r\n }\r\n self.hideContainer();\r\n }\r\n }\r\n },\r\n\r\n // Перемещает реальный input в div с выбранными.\r\n moveInputToSelecetedItem: function () {\r\n var self = this;\r\n\r\n // Shirobokov_AV: Для исправления дефекта с неотображаемыми текстбоксами в хроме и сафари (№ 56018).\r\n if ($('#modal_window form').length != 0) { $('#modal_window form').css(\"position\", \"relative\"); }\r\n\r\n if (self.selectedItems.find('input').length == 0) {\r\n // Создаем фэйковую input для сохранения красоты.\r\n var placeholder = self.inp.data('placeholder') ? self.inp.data('placeholder') : self.inp.attr('placeholder');\r\n self.fakeInp = $('')\r\n .bind('focus.refselect', function () {\r\n self.inp.focus();\r\n })\r\n .addClass(self.inp.attr('class'))\r\n .attr('placeholder', placeholder);\r\n\r\n if (self.backgroundColor) {\r\n self.fakeInp.css('background-color', self.backgroundColor);\r\n }\r\n\r\n if ($.ipad) {\r\n self.inpParent.bind('click touchstart', function (e) {\r\n self.inp.focus();\r\n if (!WA.ENV.isAndroid()) {\r\n e.stopPropagation();\r\n }\r\n });\r\n }\r\n\r\n self.inpParent.append(self.fakeInp);\r\n self.inpParent.attr('data-stataction', 'Requisite');\r\n\r\n self.fakeInp.on('contextmenu', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n });\r\n\r\n // Корректируем стили для множественного выбора.\r\n /*self.inpParent.css({ 'padding-right': '2px' });\r\n self.img.css({ right: 0 });*/\r\n\r\n // Добавляем реальный input в div с выбранными.\r\n self.selectedItems.append(self.inp);\r\n\r\n self.inp\r\n .addClass('rs_multi_input')\r\n .bind('keyup.refselect', function () {\r\n self.changeInpWidthAndPadding();\r\n })\r\n .bind('click.refselect', function (e) {\r\n // Запрещаем все остальные события, такие как клик на контейнер выбранных записей.\r\n e.stopPropagation();\r\n });\r\n }\r\n },\r\n\r\n // Формирует HTML строку для выбранного элемента.\r\n createNewSelecetedItemHTML: function (val) {\r\n\r\n var self = this;\r\n\r\n if (val[self.cellToInput] == '') return '';\r\n\r\n // Передано выбранное значение с кодом справочника, то вычленим его.\r\n var refCode = '';\r\n var id = val[self.cellIDIndex];\r\n var idParts = ('' + id).split(':');\r\n // Получаем код справочника из ИД, если он там есть, иначе берем переданный или первый в списке.\r\n if (idParts.length == 2) {\r\n refCode = idParts[0];\r\n id = idParts[1];\r\n } else {\r\n refCode = self.getFirstRefCode();\r\n }\r\n\r\n var refDesc = null;\r\n if (refCode != '' && typeof self.refcodes[refCode] !== 'undefined') {\r\n refDesc = self.refcodes[refCode];\r\n }\r\n\r\n var hintData = self.getHintData(refCode, id, val[self.cellToInput]);\r\n var delIco = $.ipad && !self.isReadonly() ? '' : (self.multiselect ? ';' : ''); \r\n var inputText = (val[self.cellToInput] === 'undefined') ? '' : ('' + val[self.cellToInput]).escapeHtml();\r\n var dataText = ' data-text=\"' + inputText + '\" ';\r\n\r\n // Если нет прав на реквизит, то не подчеркиваем *.\r\n var spanClass = '';\r\n if (val[self.cellToInput] == '*') {\r\n delIco = '';\r\n spanClass = ' underline-none ';\r\n }\r\n let dataId = val[self.cellIDIndex].toString().escapeHtml();\r\n let spanAttributes = `class=\"${hintData['class']}${spanClass}\" data-id=\"${dataId}\" ${dataText} ${hintData['attr']}`;\r\n if (self.inp.css('color')) {\r\n spanAttributes += ` style=\"color:${self.inp.css('color')}\"`;\r\n }\r\n return `${inputText}${delIco}`;\r\n },\r\n\r\n // Создает новый выбранный элемент.\r\n createNewSelecetedItem: function (val, items) {\r\n var self = this;\r\n var lastItem;\r\n\r\n if (typeof items === 'undefined' || items == null) {\r\n var html = self.createNewSelecetedItemHTML(val);\r\n if (html == '') return;\r\n lastItem = $(html);\r\n } else {\r\n lastItem = items;\r\n }\r\n\r\n if (self.isReadonly()) {\r\n lastItem.addClass('Req_Disabled');\r\n } else {\r\n lastItem.bind('click.refselect', function (e) {\r\n if (self.multiselect) {\r\n // Запрещаем все остальные события, такие как клик на контейнер выбранных записей.\r\n e.stopPropagation();\r\n var $this = $(this);\r\n var middleX = $this.offset().left + ($this.outerWidth(true) / 2);\r\n // Если кликнули на первую половину, то input перемещаем слева, иначе справа.\r\n if (e.clientX < middleX) {\r\n $this.before(self.inp);\r\n } else {\r\n $this.after(self.inp);\r\n }\r\n self.changeInpWidthAndPadding();\r\n }\r\n setTimeout(function () { //для IE\r\n self.inp.focus();\r\n }, 100);\r\n });\r\n lastItem.find('svg').one('click.refselect touchstart', function () { self.deleteOneItem($(this).parent()); });\r\n }\r\n\r\n self.inp.before(lastItem);\r\n\r\n // Подсказки к выбранным элементам.\r\n $.each(lastItem, function () {\r\n if ($(this).hasClass('hint')) {\r\n InitAdditionalInfoTooltip($(this));\r\n }\r\n });\r\n\r\n // Очищаем input, т.к. уже добавили новый элемент во внешнюю div.\r\n self.inp.val('');\r\n self.oldv = '';\r\n\r\n // Обновляем скрытое поле.\r\n self.changeHiddenValue();\r\n\r\n //Изменяем ширину input.\r\n self.changeInpWidthAndPadding();\r\n },\r\n\r\n // Удаляет переданный элемент.\r\n deleteOneItem: function (item, callSelectEmpty, isNeedAnimate) {\r\n var self = this;\r\n if (item.length > 0) {\r\n var removeFunc = function () {\r\n $(item).remove();\r\n var oldval = self.hidd.val()\r\n\r\n self.changeHiddenValue();\r\n\r\n self.triggerResultEvent(oldval, null);\r\n\r\n self.changeInpWidthAndPadding();\r\n //Вызываем функцию здесь, чтобы сработала после анимации, для множественного выбора один раз должна сработать\r\n if (self.selectedItems.children('span').length == 0) {\r\n self.selectEmpty(callSelectEmpty !== false);\r\n }\r\n };\r\n if (isNeedAnimate !== false) {\r\n item.animate({ width: 0 }, 300, 'linear', removeFunc);\r\n } else {\r\n removeFunc();\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Удаляет элементы пачкой по таймауту.\r\n *\r\n * @method deleteItems\r\n * @param {Object} item Удаляемый элемент.\r\n * @private \r\n * @since 5.7.0\r\n */ \r\n deleteItems(item) { \r\n if (item.length) {\r\n const oldval = this.hidd.val();\r\n const removeFunc = () => {\r\n // Ожидаем удаления следующий элементов в течении 0,5 с, чтобы отправить один запрос на сервер.\r\n clearTimeout(this.deleteItemsTimeout);\r\n this.deleteItemsTimeout = setTimeout(() => {\r\n this.changeHiddenValue();\r\n this.triggerResultEvent(oldval, null);\r\n }, 500); \r\n \r\n };\r\n removeFunc();\r\n item.animate({ width: 0 }, 300, 'linear', () => {\r\n $(item).remove();\r\n this.changeInpWidthAndPadding();\r\n }); \r\n } \r\n },\r\n\r\n // Удаляет все элементы.\r\n deleteAllItems: function (callSelectEmpty) {\r\n var self = this;\r\n if (self.selectedItems !== null) {\r\n var childspan = self.selectedItems.children('span');\r\n if (childspan.length > 0) {\r\n self.selectEmpty(callSelectEmpty !== false);\r\n }\r\n childspan.remove();\r\n }\r\n self.changeHiddenValue();\r\n self.changeInpWidthAndPadding();\r\n },\r\n\r\n // Изменяет ширину input и сдвигает каретку.\r\n changeInpWidthAndPadding: function (isInitOrBlur) {\r\n var self = this;\r\n\r\n if (self.inpParent !== null) {\r\n // Если inpParent скрыт, то Width работать не будет, поэтому навешиваемся на любой клик для мониторинга видимости этого элемента.\r\n if (self.inpParent.is(':hidden')) {\r\n var checkVis = function () {\r\n if (self.inpParent.is(':visible')) {\r\n self.changeInpWidthAndPadding();\r\n $('body').unbind('click keyup keydown', checkVis);\r\n }\r\n }\r\n $('body').bind('click keyup keydown', checkVis);\r\n return;\r\n }\r\n\r\n var parentWidth = self.inpParent.width() - 21; //21 - картинка с \"...\"\r\n self.selectedItemsCont.css({ 'width': parentWidth });\r\n }\r\n\r\n\r\n // Меняем длину input в зависимости от введенного текста.\r\n var inpWidth = 12;\r\n if ($.ipad) {\r\n inpWidth = 70;\r\n }\r\n self.inp.css({ 'width': (inpWidth + self.getTextMetric(self.inp)) });\r\n\r\n // Считаем длину всех выбранных элементов для сдвига.\r\n var sumWidthBeforeInp = 0;\r\n var sumWidthAll = 0;\r\n var isInp = false;\r\n if (self.selectedItems !== null) {\r\n self.selectedItems.children().each(function () {\r\n var w = $(this).outerWidth(true);\r\n sumWidthAll += w;\r\n // Считаем сумму выбранных элементов до input + сам input, что бы input находился всегда на виду.\r\n if (!isInp) {\r\n sumWidthBeforeInp += w;\r\n isInp = $(this).hasClass('rs_multi_input');\r\n }\r\n });\r\n }\r\n // Сдвигам влево выбранные записи.\r\n var dLeft = parentWidth - sumWidthBeforeInp;\r\n // Если это инициализация значений или потеря фокуса, то сместим выбранные записи в самое лево, что бы был виден первый элемент.\r\n if (dLeft < 0 || dLeft > 0 || !!isInitOrBlur || !self.inp.is(':focus')) dLeft = '0px'; //что бы не уезжал вправо\r\n if (self.selectedItems !== null) {\r\n self.selectedItems.css({ left: dLeft });\r\n self.selectedItemsCont.scrollLeft(0); //При focus'е на input невидимый (overflow:hidden) скрол смещается, ставим его наместо!\r\n }\r\n self.setCoordForContainer();\r\n },\r\n\r\n // Определяет ширину введенного текста в input.\r\n getTextMetric: function (input) {\r\n var body = $('body');\r\n var textMetric = body.find('.textMetric:first');\r\n if (textMetric.length == 0) {\r\n textMetric = $('
').addClass('textMetric').css({\r\n position: 'absolute',\r\n left: -1000,\r\n top: -1000,\r\n display: 'none'\r\n });\r\n body.append(textMetric);\r\n\r\n var styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];\r\n $.each(styles, function () {\r\n var s = this.toString();\r\n textMetric.css(s, input.css(s));\r\n });\r\n }\r\n let text = '';\r\n if (input.val()) {\r\n text = input.val().replace(/ /g, ' ').replace(//g, '>');\r\n }\r\n return textMetric.html(text).outerWidth();\r\n },\r\n\r\n // Обновляет скрытое поле значениями из выбранных блоков.\r\n changeHiddenValue: function () {\r\n var self = this;\r\n var ids = '';\r\n if (self.selectedItems !== null) {\r\n self.selectedItems.children('span').each(function () {\r\n ids += $(this).data('id') + ';';\r\n });\r\n }\r\n // Удаляем последнюю ;\r\n if (ids != '') {\r\n ids = ids.substr(0, ids.length - 1);\r\n self._hidePlaceholder();\r\n }\r\n\r\n self.hidd.val(ids);\r\n },\r\n\r\n // Заменяет выбранный элемент на новые.\r\n replaceSelectedItem: function (oldID, newValues, onlyLast) {\r\n var onlyLast = onlyLast || false;\r\n var self = this;\r\n\r\n var replaced = self.selectedItems.find('span[data-id=\"' + oldID + '\"]');\r\n if (onlyLast) {\r\n replaced = replaced.last();\r\n };\r\n\r\n if (replaced.length > 0) {\r\n replaced.after(self.inp);\r\n self.deleteOneItem(replaced, true, false);\r\n\r\n var html = '';\r\n $.each(newValues, function () {\r\n html += self.createNewSelecetedItemHTML(this);\r\n });\r\n\r\n // Создаем сразу все span так быстрее.\r\n self.createNewSelecetedItem(null, $(html));\r\n\r\n setTimeout(function () {\r\n self.inp.focus();\r\n }, 100);\r\n }\r\n },\r\n\r\n // Событие при нажатии клавиши влево при множественном выборе.\r\n multiLeft: function (toBegin) {\r\n var self = this;\r\n var item;\r\n if (toBegin) {\r\n item = self.selectedItems.children('span:first');\r\n } else {\r\n item = self.inp.prev();\r\n }\r\n item.before(self.inp);\r\n\r\n setTimeout(function () { //для IE\r\n self.inp.focus();\r\n }, 100);\r\n\r\n self.changeInpWidthAndPadding();\r\n },\r\n\r\n // Событие при нажатии клавиши вправо при множественном выборе.\r\n multiRight: function (toEnd) {\r\n var self = this;\r\n var item;\r\n if (toEnd) {\r\n item = self.selectedItems.children('span:last');\r\n } else {\r\n item = self.inp.next();\r\n }\r\n item.after(self.inp);\r\n\r\n setTimeout(function () { //для IE\r\n self.inp.focus();\r\n }, 100);\r\n\r\n self.changeInpWidthAndPadding();\r\n },\r\n\r\n // Значение из представленных не выбранно.\r\n selectEmpty: function (AlwaysEmpty) {\r\n var self = this;\r\n if (self.mustMatch || AlwaysEmpty) {\r\n self.inp.val('');\r\n //Шамов А.: Убрал, т.к. удалять если в Input ввели что-то некорректно не правильно, пусть остается предыдущее значение.\r\n //self.deleteAllItems();\r\n //self.inp.trigger('result', [null]);\r\n var item = self.selectedItems.find('span');\r\n if (item.length == 1) {\r\n //Значение осталось прежним выбранным.\r\n self.inp.data('selected', true);\r\n } else {\r\n //Ничего ранее выбранно не было и сейчас не выбрали, то сообщаем об этом внешнему интерфейсу.\r\n if (self.multiselect) {\r\n //Шамов А.: Не вызываем триггер result во множественном выборе, т.к. оно перезапишет значение в скрытом поле.\r\n self.inp.trigger(\"resultMulti\", [null]);\r\n }\r\n else {\r\n self.inp.trigger('result', [null]);\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Отображает выбор из справочника.\r\n showContainer: function () {\r\n var self = this;\r\n $.each($('.rs_container'), function () {\r\n if ($(this).attr('id') != self.contId) $(this).hide();\r\n });\r\n\r\n // Не отображаем выпадающий список, если открылся модальный диалог и этот выбор из справочника не в нем.\r\n if ($('.ui-dialog:visible').length == 0 || self.img.parents('.ui-dialog').length > 0) {\r\n self.setCoordForContainer();\r\n self.container.show();\r\n var firstItem = self.table.find('tr:first');\r\n if (firstItem.data('rowData') && self.table.find('tr.rs_tr_over').length == 0) firstItem.addClass('rs_tr_over');\r\n if ($.scrollActive) {\r\n if (!self.container.data('iscroll')) {\r\n self.container.data('iscroll', new iScroll(self.container.find('.rs_results')[0]));\r\n } else {\r\n self.container.data('iscroll').refresh();\r\n }\r\n }\r\n };\r\n\r\n self.bindScrollLoad();\r\n },\r\n\r\n bindScrollLoad: function () {\r\n var self = this;\r\n self.results.off('scroll.refselect').on('scroll.refselect', function () {\r\n var scroller = $(this);\r\n var table = scroller.find('table:first');\r\n var bottomDistance;\r\n if (!self.suggestInProcess) {\r\n if ($.scrollActive) { // проверка на скролл на сенсорных устройствах\r\n bottomDistance = table.height() - scroller.height() - scroller.offset().top + table.offset().top;\r\n } else {\r\n bottomDistance = table.height() - (scroller.scrollTop() + scroller.height());\r\n }\r\n if (bottomDistance < 100) self.loadPage(1);\r\n }\r\n });\r\n },\r\n\r\n // Скрывает выбор из справочника и очищает поле ввода если ничего не выбрано.\r\n hideContainer: function () {\r\n var self = this;\r\n if (self.inp.data('selected') == 'false') {\r\n self.selectEmpty(true);\r\n }\r\n self._hideAndResetContainer();\r\n },\r\n\r\n // Скрывает выбор из справочника.\r\n _hideAndResetContainer: function () {\r\n var self = this;\r\n self.selectedRefCode = null;\r\n self.selectedRefIsClosed = false;\r\n self.results.off('scroll.refselect');\r\n self.table.empty().removeData('refcode');\r\n self.currentPage = 1;\r\n self.oldv = '';\r\n $('.rs_container').hide();\r\n },\r\n\r\n getQueryValue: function () {\r\n var self = this;\r\n var v = self.inp.val();\r\n if (self.multiselect) {\r\n var vs = v.split(';');\r\n v = vs[vs.length - 1];\r\n }\r\n return $.trim(v);\r\n },\r\n\r\n showSpinner: function () {\r\n var self = this;\r\n if (self.spinner_timeout != null) clearTimeout(self.spinner_timeout);\r\n self.spinner_timeout = setTimeout(function () {\r\n var spinner = self.img.find('.refselect-input__spinner');\r\n var icon = self.img.find('.refselect-input__icon');\r\n if (spinner.length === 0) {\r\n self.img.append('
');\r\n } else {\r\n spinner.show();\r\n }\r\n icon.hide();\r\n }, 100);\r\n\r\n self.suggestInProcess = true;\r\n self.inp.addClass('suggestInProcess');\r\n },\r\n\r\n hideSpinner: function () {\r\n var self = this;\r\n if (self.spinner_timeout != null) clearTimeout(self.spinner_timeout);\r\n if (self.img !== null) {\r\n var spinner = self.img.find('.refselect-input__spinner');\r\n var icon = self.img.find('.refselect-input__icon');\r\n\r\n if (spinner) {\r\n spinner.hide();\r\n icon.show();\r\n }\r\n }\r\n self.suggestInProcess = false;\r\n self.inp.removeClass('suggestInProcess');\r\n },\r\n\r\n // Получает первый переданный справочник.\r\n getFirstRefCode: function () {\r\n var self = this;\r\n // Получить первый элемент можно только так.\r\n for (var refcode in self.refcodes) {\r\n // Возвращаем первый реальный справочника, а не псевдо (#95748).\r\n if (!self.refcodes[refcode].IsPseudoReference) {\r\n return refcode;\r\n }\r\n }\r\n return '';\r\n },\r\n\r\n /**\r\n * Установить выборку из указанных справочников\r\n * @param {object} references - информация о справочниках {\"ОРГ\":{\"Caption\":\r\n * \"организации\",...},\"РАБ\":{..}}}\r\n * @function setReferences\r\n */\r\n setReferences: function (references) {\r\n this._checkIsReferencesSetProperly(references);\r\n this.refcodes = references;\r\n this.refcodesCount = this._getReferencesCount();\r\n this._makeIconAccessible();\r\n return this;\r\n },\r\n\r\n /**\r\n * К существующим спраочникам, по которым идет выборка, добавить указанные.\r\n * @param {object} references - информация о справочниках {\"ОРГ\":{\"Caption\":\r\n * \"организации\",...},\"РАБ\":{..}}}\r\n * @function addReferences\r\n */\r\n addReferences: function (references) {\r\n this._checkIsReferencesSetProperly(references);\r\n var object = $.extend(this.refcodes, references);\r\n this.refcodesCount = this._getReferencesCount();\r\n this._makeIconAccessible();\r\n return this;\r\n },\r\n\r\n /**\r\n * Проверка введенных параметров\r\n * @private\r\n */\r\n _checkIsReferencesSetProperly: function (references) {\r\n if (!references) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\", \"references\");\r\n if (typeof references !== 'object') {\r\n WA.raise('ERR_AN_INVALID_PARAMETER_WAS_PASSED_TO_FUNCTION');\r\n };\r\n },\r\n\r\n /**\r\n * Сделать иконку кликабельной, и задать ей нормальную подпись.\r\n * @private\r\n */\r\n _makeIconAccessible: function () {\r\n this.img.removeClass(\"Req_Icon_AccessDenied\");\r\n this.img.attr(\"title\", this._getToolTip());\r\n },\r\n\r\n /**\r\n * Сформировать текст сплывающей подсказки.\r\n * @private\r\n */\r\n _getToolTip: function () {\r\n var lbl = \"RECORDS_OF_REFERENCE\";\r\n if (this.refcodesCount > 1) lbl = \"RECORDS_OF_REFERENCES\";\r\n var refs = [];\r\n for (var item in this.refcodes) {\r\n refs.push(this.refcodes[item].Caption);\r\n };\r\n return L(lbl, '\"' + refs.join(\", \") + '\"');\r\n },\r\n\r\n /**\r\n * Подсчет кол-ва справочников по которым идет выборка.\r\n * @private\r\n */\r\n _getReferencesCount: function () {\r\n var count = 0;\r\n for (var k in this.refcodes) {\r\n if (this.refcodes.hasOwnProperty(k)) {\r\n ++count;\r\n }\r\n }\r\n return count;\r\n },\r\n\r\n // Список последних запросов к серверу.\r\n lastRequests: [],\r\n // Выполняет поисковый запрос.\r\n suggest: function (afterShowCallback, disableSendQuery) {\r\n var self = this;\r\n\r\n // Блокируем поиск если это необходимо.\r\n if (!!disableSendQuery) return;\r\n\r\n\r\n function onSearchQueryDoneCallback() {\r\n var refCode;\r\n if (self.refsWithRecords.length == 0) {\r\n refCode = self.getFirstRefCode();\r\n } else {\r\n //Найдено больше 2 справочников, покажем выбор из первого справочников с записями.\r\n for (var refcode in self.refcodes) {\r\n if ($.inArray(refcode, self.refsWithRecords) != -1) {\r\n refCode = refcode;\r\n break;\r\n }\r\n }\r\n }\r\n self.selectedRefCode = refCode;\r\n\r\n //Запоминаем последнее введенное значение, что бы не было зацикливания. Замечание №55804.\r\n self.lastQuery = query;\r\n self.suggest(afterShowCallback);\r\n self.hideSpinner();\r\n };\r\n\r\n function onSearchError() {\r\n //self.hideContainer();\r\n self.hideSpinner();\r\n };\r\n\r\n function searchInOtherReferences() {\r\n self.refsWithRecords = [];\r\n self.refsWithErrorMessage = {};\r\n var requests = [];\r\n for (var refcode in self.refcodes) {\r\n var OnSuccessFunc = (function (refcode) { //Эта обертка нужна что бы замыкание переменной refcode сработало корректно, иначе в refcode будет всегда последнее значение.\r\n return function (maxPages, data) {\r\n // Какие-то записи найдены.\r\n if (data.length > 0) {\r\n self.refsWithRecords.push(refcode);\r\n }\r\n }\r\n })(refcode);\r\n var OnErrorFunc = (function (refcode) {\r\n return function (msg, isHttp) {\r\n // Если там ошибка и она не тот что записей не найдено, сохраним её для вывода в шапке.\r\n if (msg !== self.NoMatchText) {\r\n // В некоторых случаях нужно отображать разные сообщения в заголовке и при раскрытии.\r\n self.refsWithErrorMessage[refcode] = msg.split('^')[0];\r\n }\r\n }\r\n })(refcode);\r\n // Добавляем запрос к списку, что бы дождаться выполнения всех.\r\n requests.push(self.sendQuery(refcode, query, 1, self.max, OnSuccessFunc, OnErrorFunc));\r\n }\r\n self.lastRequests = $.merge(self.lastRequests, requests);\r\n // Ждем пока все запросы выполнятся.\r\n deferred = $.when.apply(this, requests);\r\n deferred.done(onSearchQueryDoneCallback).fail(onSearchError);\r\n };\r\n\r\n // Прекращаем все предыдущие запросы.\r\n while (self.lastRequests.length > 0) {\r\n self.lastRequests.pop().abort();\r\n };\r\n\r\n // Если не нужно показывать всё, то при пустом значении input поиск не выполняем.\r\n if (self.multiselect && self.suggestLastMode != 'show_all' && self.inp.val() == '') {\r\n self.hideContainer();\r\n self.hideSpinner();\r\n return;\r\n }\r\n\r\n self.showSpinner();\r\n\r\n var query = (self.suggestLastMode == 'show_all' ? '' : self.getQueryValue());\r\n\r\n // Если текст запроса изменился, то сбрасываем страницы на первую.\r\n if (query != self.lastQuery || self.selectedRefCode != self.lastSelectedRefCode) {\r\n self.currentPage = 1;\r\n self.results.scrollTop(0);\r\n }\r\n\r\n // Если указаны несколько кодов справочника, то отображаем выбор.\r\n // Провериям изменился ли текст в input что бы переполучить refsWithRecords. Замечание №55804.\r\n if ((query != self.lastQuery || (typeof self.selectedRefCode === 'undefined' || self.selectedRefCode == null)) && self.refcodesCount > 0) {\r\n if (self.refcodesCount > 1) {\r\n self.refsWithRecords = [];\r\n self.refsWithErrorMessage = {};\r\n\r\n if (!!self.mainReferenceCode) {\r\n self.sendQuery(self.mainReferenceCode, query, 1, self.max, function (maxPages, data) {\r\n // Какие-то записи найдены.\r\n if (data.length > 0) {\r\n for (var refcode in self.refcodes) {\r\n self.refsWithRecords.push(refcode);\r\n }\r\n onSearchQueryDoneCallback();\r\n } else {\r\n for (var refcode in self.refcodes) {\r\n if (refcode !== self.mainReferenceCode) {\r\n self.refsWithRecords.push(refcode);\r\n }\r\n }\r\n searchInOtherReferences();\r\n }\r\n }, function (msg, isHttp) {\r\n // Если там ошибка и она не тот что записей не найдено, сохраним её для вывода в шапке.\r\n if (msg !== self.NoMatchText) {\r\n // В некоторых случаях нужно отображать разные сообщения в заголовке и при раскрытии.\r\n self.refsWithErrorMessage[self.mainReferenceCode] = msg.split('^')[0];\r\n }\r\n }).fail(onSearchError);\r\n\r\n } else {\r\n // Делаем запросы по всем справочникам, что бы лишний раз не заставлять пользователя его выбирать.\r\n searchInOtherReferences();\r\n }\r\n\r\n return;\r\n } else {\r\n self.selectedRefCode = self.getFirstRefCode();\r\n }\r\n }\r\n\r\n if (Core.isStatisticEnabled) {\r\n // Записываем статистику.\r\n WA.CR.statistics.write({\r\n page: WA.getLocation(),\r\n action: 'LikeQuery',\r\n area: 'ReferenceRequisite',\r\n target: self.inp.get(0)\r\n });\r\n };\r\n\r\n self.lastRequests.push(self.sendQuery(self.selectedRefCode, query, self.currentPage, self.max, function (maxPages, data) {\r\n //OnSuccess\r\n self.maxPages = maxPages;\r\n if (self.currentPage == 1) self.table.empty().removeData('refcode');\r\n\r\n // Обновим видимость табилицы с записями справочника.\r\n self.updateTableVisibility();\r\n var isEmpty = self.createRows(self.selectedRefCode, data, afterShowCallback);\r\n\r\n if (!isEmpty && (self.suggestLastMode == 'show' || self.suggestLastMode == 'show_all')) {\r\n self.showContainer();\r\n if (afterShowCallback) afterShowCallback();\r\n } else {\r\n self.hideContainer();\r\n }\r\n\r\n self.hideSpinner();\r\n }, function (msg, isHttp) {\r\n // OnError\r\n\r\n // Обновим видимость табилицы с записями справочника.\r\n self.updateTableVisibility();\r\n\r\n if (msg != 'abort') {\r\n self.showError(isHttp ? L('SERVER_ERROR_OCCURRED') : msg);\r\n }\r\n self.hideSpinner();\r\n }));\r\n\r\n self.lastQuery = query;\r\n self.lastSelectedRefCode = self.selectedRefCode;\r\n },\r\n\r\n sendQuery: function (RefCode, Query, Page, Limit, OnSuccess, OnError) {\r\n var self = this;\r\n\r\n if (!self.refcodes[RefCode]) {\r\n var d = $.Deferred();\r\n d.reject();\r\n return d;\r\n }\r\n\r\n var filter = \"\";\r\n if (self.refcodes[RefCode] && self.refcodes[RefCode]['Filter'] !== null) {\r\n filter = self.refcodes[RefCode]['Filter'];\r\n } else {\r\n filter = self.inp.data('filter');\r\n };\r\n\r\n // Нужно ли отключать спец. обработку справочника.\r\n if (self.refcodes[RefCode]) {\r\n var disablespecialprocessing = self.refcodes[RefCode]['DisableSpecialProcessing'];\r\n }\r\n\r\n var queryContext = self.queryContext;\r\n // Множественный выбор ссылается на несколько ревизитов, поэтому меняем контекст.\r\n if (self.referenceCodesAndReqNamesInDetailSection && self.referenceCodesAndReqNamesInDetailSection[RefCode]) {\r\n queryContext = JSON.parse(queryContext);\r\n queryContext.requisiteNumber = self.referenceCodesAndReqNamesInDetailSection[RefCode].number;\r\n queryContext = JSON.stringify(queryContext);\r\n }\r\n\r\n var url = self.url + '&RefCode=' + encodeURI(RefCode);\r\n var params = $.extend({\r\n q: Query || \"\",\r\n limit: Limit,\r\n page: Page,\r\n filter: filter,\r\n sort: self.inp.data('sort'),\r\n useadditional: self.useadditional ? \"1\" : \"0\",\r\n disablespecialprocessing: disablespecialprocessing ? \"1\" : \"0\",\r\n queryContext: queryContext,\r\n }, self.extraParams || {});\r\n\r\n return self.dataProvider.sendQuery(url, params, OnSuccess, OnError);\r\n },\r\n\r\n // Обновяет видимость табилицы с записями справочника.\r\n updateTableVisibility: function () {\r\n var self = this;\r\n if ((typeof self.refsWithRecords != 'undefined' && self.refsWithRecords.length == 0) || !self.selectedRefIsClosed) {\r\n self.table.show();\r\n } else {\r\n self.table.hide();\r\n }\r\n // Сохраним в таблице код справочника записи которого были выбраны.\r\n self.table.data('refcode', self.selectedRefCode);\r\n },\r\n\r\n showError: function (msg, afterShowCallback) {\r\n var self = this;\r\n self.makeTitleAndFooter(afterShowCallback);\r\n\r\n // В некоторых случаях нужно отображать немного другой текст ошибки, чем в заголовке справочника.\r\n if (msg.indexOf('^') != -1) {\r\n if (self.multiselect) {\r\n msg = msg.split('^')[1];\r\n } else {\r\n msg = msg.replace('^', '. ');\r\n }\r\n }\r\n\r\n\r\n if (self.inp.offset().top === 0) return; //не показываем ничего если инпута уже нет\r\n\r\n\r\n self.table.html('' + msg + '');\r\n self.showContainer();\r\n if (afterShowCallback) afterShowCallback();\r\n self.hideSpinner();\r\n },\r\n\r\n // Формирует шапку и подножие.\r\n makeTitleAndFooter: function (afterShowCallback) {\r\n var self = this;\r\n\r\n if (self.refcodesCount > 1) {\r\n var beforeRefCodes = [];\r\n var afterRefCodes = [];\r\n var current = beforeRefCodes;\r\n\r\n // Определяем коды справочника до и после выбранного.\r\n for (var refcode in self.refcodes) {\r\n current.push(refcode);\r\n if (refcode == self.selectedRefCode) {\r\n current = afterRefCodes;\r\n }\r\n }\r\n\r\n var makeDivs = function (codes, container) {\r\n if (codes.length == 0) {\r\n container.empty();\r\n } else {\r\n var html = '';\r\n for (var i = 0; i < codes.length; i++) {\r\n if ((typeof self.refsWithRecords != 'undefined' && $.inArray(codes[i], self.refsWithRecords) != -1) ||\r\n (typeof self.refsWithErrorMessage != 'undefined' && typeof self.refsWithErrorMessage[codes[i]] != 'undefined')) {\r\n\r\n var cssClass = '';\r\n if (codes[i] == self.selectedRefCode) cssClass = 'selected';\r\n if (self.selectedRefIsClosed) cssClass += ' closed';\r\n\r\n html += '
';\r\n html +=\r\n '

' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '

';\r\n html += self.refcodes[codes[i]].Caption;\r\n\r\n if (typeof self.refsWithErrorMessage != 'undefined' && typeof self.refsWithErrorMessage[codes[i]] != 'undefined') {\r\n html += ' (' + $.trim(self.refsWithErrorMessage[codes[i]].toLowerCase()) + ')';\r\n }\r\n\r\n html += '
';\r\n }\r\n }\r\n container.html(html).find('div')\r\n .bind('click.refselect', function () { self.selectReference(this, afterShowCallback); })\r\n .hover(\r\n function () { $(this).addClass('hover'); },\r\n function () { $(this).parent().children('.rs_RefCaption').removeClass('hover'); }\r\n );\r\n }\r\n }\r\n\r\n //Формируем заголовок\r\n makeDivs(beforeRefCodes, self.title);\r\n if (beforeRefCodes.length > 0) {\r\n self.title.show();\r\n } else {\r\n self.title.hide();\r\n }\r\n\r\n //Формируем подножие\r\n makeDivs(afterRefCodes, self.footer);\r\n if (afterRefCodes.length > 0) {\r\n self.footer.show();\r\n } else {\r\n self.footer.hide();\r\n }\r\n } else {\r\n self.title.hide();\r\n self.footer.hide();\r\n }\r\n },\r\n\r\n // Выбирает справочник и открывает/подгружает его записи.\r\n selectReference: function (refCaption, afterShowCallback) {\r\n var self = this;\r\n var $this = $(refCaption);\r\n if ($this.hasClass('selected')) {\r\n self.selectedRefIsClosed = !$this.hasClass('closed');\r\n } else {\r\n self.selectedRefIsClosed = false;\r\n }\r\n\r\n // Навешиваем/снимаем стиль закрыточки справочника.\r\n if (self.selectedRefIsClosed) {\r\n $this.addClass('closed');\r\n } else {\r\n $this.removeClass('closed');\r\n }\r\n\r\n self.inp.focus();\r\n self.selectedRefCode = $this.data('refcode');\r\n self.suggest(afterShowCallback);\r\n },\r\n\r\n // Генерирует data-атрибут и нужный css-класс для html-элемента.\r\n getHintData: function (refcode, id, text) {\r\n var self = this;\r\n // Нужно ли отображать подсказку.\r\n var hintClass = (self.refcodes[refcode] && self.refcodes[refcode].NeedShowHint ? \"hint \" : \"\");\r\n var hintData;\r\n if (self.refcodes[refcode] && self.refcodes[refcode].NeedShowHint) {\r\n if (id.indexOf('_') != -1) {\r\n var idParts = id.split('_');\r\n refcode = idParts[0];\r\n id = idParts[1];\r\n }\r\n hintData = ' data-hint=\"{ \\'compcode\\' : \\'' + refcode + '\\', \\'id\\' : \\'' + id + '\\' }\" ';\r\n } else {\r\n hintData = ' title=\"' + (('' + text + '').replace(/\"/g, '"')) + '\" ';\r\n }\r\n return {\r\n 'attr': hintData,\r\n 'class': hintClass\r\n };\r\n },\r\n\r\n // Строит результирующую таблицу.\r\n createRows: function (refCode, rows, afterShowCallback) {\r\n var self = this;\r\n var tr, td;\r\n var isEmpty;\r\n var table_html = '';\r\n\r\n self.makeTitleAndFooter(afterShowCallback);\r\n\r\n var rowsByUid = {};\r\n\r\n if (rows.length > 0) {\r\n rows.forEach(function (row, i) {\r\n if (isNaN(parseInt(row.id, 10)) || row.id >= 0) {\r\n var rowUid = '' + Math.random();\r\n rowsByUid[rowUid] = row;\r\n var hintData = self.getHintData(refCode, row.id, row.title);\r\n table_html += '';\r\n table_html += '' + self.highlight(row.encodedTitle, self.getQueryValue()) + '';\r\n } else {\r\n table_html += '';\r\n table_html += '
' + row.encodedTitle + '
';\r\n // Только 1 сообщение об ошибке и пустая строка.\r\n if (rows.length == 0) {\r\n self.maxPages = self.currentPage;\r\n }\r\n }\r\n table_html += '';\r\n });\r\n\r\n //Удалем строку с ошибкой, если она там была.\r\n self.table.find('td.error').parent().remove();\r\n\r\n var newRows = $(table_html);\r\n // Связываем HTML строку с данными.\r\n $.each(newRows, function (index, newRow) {\r\n var rowUid = $(newRow).data('rowuid');\r\n $(newRow).data('rowData', rowsByUid[rowUid]);\r\n });\r\n\r\n var trs = self.table.append(newRows).find('tr:not(.rs_tr_error)');\r\n trs.unbind('mouseenter.refselect').bind('mouseenter.refselect', function () { $(this).siblings('.rs_tr_over').removeClass('rs_tr_over'); $(this).addClass('rs_tr_over'); })\r\n .unbind('mouseleave.refselect').bind('mouseleave.refselect', function () { $(this).parent().find('.rs_tr_over').removeClass('rs_tr_over'); })\r\n .unbind('click.refselect').bind('click.refselect', function () { self.select(false, $(this)); });\r\n isEmpty = false;\r\n if (self.refcodes[refCode] && self.refcodes[refCode].NeedShowHint) {\r\n trs.each(function () {\r\n InitAdditionalInfoTooltip($(this));\r\n });\r\n }\r\n\r\n self.inp.trigger('OnRowsCreated', [refCode, trs]);\r\n\r\n } else {\r\n if (self.currentPage == 1) {\r\n isEmpty = !self.showNoMatchText;\r\n self.selectEmpty(false);\r\n if (self.showNoMatchText) {\r\n self.table.html('' + self.NoMatchText + '');\r\n }\r\n } else {\r\n // Изменим максимальное количество страниц, если записей уже нет.\r\n self.maxPages = self.currentPage;\r\n }\r\n }\r\n\r\n return isEmpty;\r\n },\r\n\r\n setCoordForContainer: function () {\r\n var self = this;\r\n var c = self.inpParent;\r\n if (c !== null && c.offset()) {\r\n var top = c.offset().top + c.height() + 3;\r\n var height = self.container.outerHeight();\r\n var wh = $(window).height();\r\n if ((top + height) > wh) {\r\n top = c.offset().top - height - 1;\r\n if (top < 0) top = 0;\r\n }\r\n\r\n var width = c.outerWidth(true) - 3;\r\n self.container.css({\r\n left: (c.offset().left),\r\n top: top,\r\n width: width,\r\n minWidth: Math.max(width, 360)\r\n });\r\n }\r\n },\r\n\r\n // Функция подцветки искомой строки.\r\n highlight: function (value, term) {\r\n if (term == '') return value;\r\n return value.replace(new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" + term.replace(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi, \"\\\\$1\") + \")(?![^<>]*>)(?![^&;]+;)\", \"gi\"), \"$1\");\r\n },\r\n\r\n // Скрыть плейсхолдер\r\n _hidePlaceholder: function () {\r\n var self = this;\r\n $(function () {\r\n if (self.fakeInp)\r\n self.fakeInp.attr(\"placeholder\", \"\");\r\n });\r\n },\r\n\r\n // Показать плейсхолдер\r\n _showPlaceholder: function () {\r\n var self = this;\r\n $(function () {\r\n if (self.fakeInp) {\r\n var input = self.fakeInp.parent().before().find('.input');\r\n var placeholder = input.data('placeholder') ? input.data('placeholder') : input.attr('placeholder');\r\n self.fakeInp.attr('placeholder', placeholder);\r\n }\r\n });\r\n }\r\n };\r\n\r\n $.fn.extend({\r\n ReferenceSelect: function (options, img) {\r\n this.data('ReferenceSelectInstance', new rs(this, options, img));\r\n this.trigger('Init');\r\n return this;\r\n },\r\n SetSelected: function (v) {\r\n this.trigger('SetSelected', [v]);\r\n },\r\n result: function (handler) {\r\n return this.bind(\"result\", handler);\r\n },\r\n resultMulti: function (handler) {\r\n return this.bind(\"resultMulti\", handler);\r\n },\r\n ReplaceSelectedItem: function (oldID, newValues) {\r\n this.trigger('ReplaceSelectedItem', [oldID, newValues, false]);\r\n },\r\n ReplaceLastSelectedItem: function (oldID, newValues) {\r\n this.trigger('ReplaceSelectedItem', [oldID, newValues, true]);\r\n },\r\n Clear: function () {\r\n this.trigger(\"Clear\");\r\n },\r\n HideContainer: function () {\r\n this.trigger(\"HideContainer\");\r\n },\r\n SetValue: function (val, needTriggerResult) {\r\n this.trigger(\"SetValue\", [val, needTriggerResult]);\r\n return $(this);\r\n },\r\n SetValues: function (values, needTriggerResult) {\r\n this.trigger(\"SetValues\", [values, needTriggerResult]);\r\n return $(this);\r\n },\r\n SetDisabled: function () {\r\n this.trigger(\"SetDisabled\", [true]);\r\n return $(this);\r\n },\r\n SetEnabled: function () {\r\n this.trigger(\"SetDisabled\", [false]);\r\n return $(this);\r\n }\r\n });\r\n})(jQuery);\r\n","(function ($, global) {\r\n /**\r\n * Результат выбора из справочника.\r\n * @typedef {Object} ReferenceSelectData\r\n * @property {string} id ИД записи.\r\n * @property {string} encodedTitle Экранированный заголовок записи.\r\n * @property {string} title Заголовок записи.\r\n * @property {string} leadingRequisitesValue Значения ведущих реквизитов (в JSON-формате)\r\n * @since 5.5.0.1000\r\n */\r\n\r\n /**\r\n * Функция, вызываемая при удачном выполнении запроса от сервера. \r\n * @callback ReferenceSelectSuccessCallback\r\n * @param {number} pageCount Общее количество страниц с данными.\r\n * @param {ReferenceSelectData[]} entities Данные от сервера.\r\n * @since 5.5.0.1000\r\n */\r\n\r\n /**\r\n * Функция, вызываемая при НЕ удачном выполнении запроса от сервера. \r\n * @callback ReferenceSelectErrorCallback\r\n * @param {string} message Сообщение об ошибке.\r\n * @param {boolean} isHttp Признак обозначающий была ли это HTTP ошибка.\r\n * @since 5.5.0.1000\r\n */\r\n\r\n /**\r\n * Провайдер данных для выбора из справочника.\r\n * @since 5.5.0.1000\r\n */\r\n var ReferenceSelectDataProvider = {\r\n /**\r\n * Отправляет запрос на сервер и обрабатывает результаты.\r\n * @param {string} url Адрес веб-сервиса или веб-хэндлера.\r\n * @param {Object} params Список параметров веб-сервиса или веб-хэндлера.\r\n * @param {ReferenceSelectSuccessCallback} OnSuccess Функция, вызываемая при удачном выполнении запроса от сервера. \r\n * @param {ReferenceSelectErrorCallback} OnError Функция, вызываемая при НЕ удачном выполнении запроса от сервера. \r\n * @returns {jqXHR} Объект запроса возвращаемой функцией jQuery.ajax.\r\n */\r\n sendQuery: function (url, params, OnSuccess, OnError) {\r\n var me = this;\r\n\r\n return $.ajax({\r\n type: \"POST\",\r\n dataType: \"text\",\r\n url: url,\r\n cache: false,\r\n data: params,\r\n success: function (res) {\r\n if (!CheckForLoginPage(res)) {\r\n var data = me._parseResponse(res);\r\n if (data.success) {\r\n if (OnSuccess) OnSuccess(data.pagesCount, data.entities);\r\n } else {\r\n if (OnError) OnError(data.errorMessage, false);\r\n }\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n if (OnError) OnError(textStatus, true);\r\n }\r\n });\r\n\r\n },\r\n\r\n /**\r\n * Парсит результат от хэндлера в массив объектов.\r\n * @private\r\n */\r\n _parseResponse: function (response) {\r\n var firstN = response.indexOf('\\n');\r\n var status = response.substr(0, firstN);\r\n var data = response.substr(firstN + 1);\r\n\r\n if ($.trim(status) != \"ERROR\") {\r\n var rows = data.split(\"\\r\\n\");\r\n var entities = rows.map(function (row) {\r\n row = $.trim(row);\r\n if (row) {\r\n var currRowData = row.split(\"|\");\r\n return {\r\n id: currRowData[0], //строка, т.к. может быть \"ПОЛ_103576\" таким значением - такое есть в последних используемых объектах\r\n encodedTitle: currRowData[1],\r\n title: currRowData[2],\r\n leadingRequisitesValue: currRowData[3]\r\n };\r\n } else {\r\n return null;\r\n }\r\n }).filter(function (entity) { return !!entity; });\r\n\r\n return {\r\n success: true,\r\n pagesCount: parseInt(status, 10),\r\n entities: entities\r\n };\r\n } else {\r\n return {\r\n success: false,\r\n errorMessage: data\r\n };\r\n }\r\n }\r\n\r\n };\r\n\r\n global.ReferenceSelectDataProvider = ReferenceSelectDataProvider;\r\n\r\n})(jQuery, window);\r\n","/* Pick-реквизит */\r\n(function ($) {\r\n function DropDownList(inp, img, hidd, keyvalues, opt, placeholder) {\r\n this.init(inp, img, hidd, keyvalues, opt, placeholder);\r\n }\r\n DropDownList.prototype = {\r\n inp: null,\r\n img: null,\r\n hidd: null,\r\n results: null,\r\n initValue: null,\r\n prevValue: null,\r\n\r\n _isShown: false,\r\n\r\n onAfterChange: null,\r\n\r\n keyvalues: [],\r\n\r\n // Инициализация класса.\r\n // inp - текстовое поле элемента.\r\n // img - иконка календаря, по которой откроется выбор.\r\n // hidd - скрытое поле для хранения ключа выбранного значения.\r\n // keyvalues - список значений и ключей.\r\n // opt - дополнительные настройки (например, onAfterChange).\r\n init: function (inp, img, hidd, keyvalues, opt, placeholder) {\r\n\r\n var me = this;\r\n me.inp = inp;\r\n me.img = img;\r\n me.hidd = hidd;\r\n me.initValue = hidd.val();\r\n me.prevValue = me.initValue;\r\n me.keyvalues = keyvalues;\r\n me.filterPlaceholder = (!!placeholder) ? placeholder : L(\"PLEASE_INPUT_VALUE\");\r\n\r\n $.extend(me, opt);\r\n \r\n // Проверяем была ли инициализация или нет.\r\n if (!me.inp.data('initComplete')) {\r\n // Инициализиуем текстовое поле. \r\n if (!me.inp.hasClass('editable')) {\r\n me.inp.bind('click.DropDownList', function (ev) {\r\n ev.stopPropagation();\r\n if (me._isShown) me.hide();\r\n else me.show();\r\n });\r\n \r\n me.inp.prop('readonly', true);\r\n } else {\r\n me.addPlaceholder();\r\n me.inp.on('change.DropDownList', function () {\r\n me.hidd.val(\"-1\");\r\n });\r\n };\r\n\r\n // Инициализация событий клавиатуры. \r\n me.inp.bind('keydown.DropDownList', me, me.keyPress); \r\n\r\n // Инициализиуем иконку. \r\n if (me.img) me.img.bind('click.DropDownList', function (ev) {\r\n ev.stopPropagation();\r\n if (me._isShown) me.hide();\r\n else me.show();\r\n });\r\n\r\n // Скрытие вариантов при click на любое другое место.\r\n setTimeout(() => {\r\n $('body').bind('click.DropDownList', () => {\r\n this.hide();\r\n });\r\n }, 0);\r\n setTimeout(() => {\r\n try {\r\n $('iframe').contents().bind('click.DropDownList', () => {\r\n this.hide();\r\n });\r\n } catch (e) { }\r\n }, 0);\r\n setTimeout(() => {\r\n $('.ui-dialog-titlebar-close').bind('click.DropDownList', () => {\r\n this.hide();\r\n });\r\n }, 0); //Крестик в модалке. Отчего-то он особый. Замечание #4683153\r\n\r\n // Инициализация завершена.\r\n me.inp.data('initComplete', true);\r\n }\r\n },\r\n\r\n addPlaceholder: function () {\r\n var me = this;\r\n me.inp.focus(function () {\r\n if ($(this).val() == me.filterPlaceholder) {\r\n $(this).removeClass(\"placeholderInInput\");\r\n $(this).val('');\r\n }\r\n });\r\n\r\n me.inp.blur(function () {\r\n if ($(this).val() == '') {\r\n $(this).addClass(\"placeholderInInput\");\r\n $(this).val(me.filterPlaceholder);\r\n } else {\r\n $(this).removeClass(\"placeholderInInput\");\r\n }\r\n });\r\n },\r\n\r\n // Событие клавиатуры.\r\n keyPress: function (e) {\r\n \r\n var me = e.data;\r\n var isVisible = me.results != null && me.results.is(':visible');\r\n\r\n if (me.inp.hasClass('disabled') || me.inp.attr('disabled')) return;\r\n\r\n if (isVisible) {\r\n if (/27$|38$|40$/.test(e.keyCode) || /9$|13$/.test(e.keyCode)) {\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n switch (e.keyCode) {\r\n case 38: // up\r\n // Если выбор не открыт, то откроем его и выделим текущую запись.\r\n me.goTo(isVisible ? -1 : 0);\r\n break;\r\n case 40: // down\r\n // Если выбор не открыт, то откроем его и выделим текущую запись.\r\n me.goTo(isVisible ? 1 : 0);\r\n break;\r\n case 9: // tab\r\n case 13: // return\r\n me.selectCurrent();\r\n $('.rs_container').hide();\r\n break;\r\n case 27: // escape\r\n me.hide();\r\n break;\r\n }\r\n }\r\n } else {\r\n if (/38$|40$/.test(e.keyCode) && e.altKey) {\r\n me.show();\r\n }\r\n }\r\n },\r\n\r\n // Метод для перехода по элементам.\r\n goTo: function (direction) {\r\n var me = this;\r\n if (!me.results) return;\r\n var selEl = me.results.find('.rs_tr_over');\r\n var newEl;\r\n\r\n // Первый раз открываем c выбранной первой записью. \r\n if (selEl.length == 0 && direction == 0) {\r\n selEl = me.results.find('tr:first');\r\n me.toggleSelected(selEl);\r\n } else {\r\n // Предыдущее значение.\r\n if (direction == -1) {\r\n newEl = selEl.prev();\r\n if (newEl.length == 0) {\r\n newEl = selEl.parent().find('tr:last');\r\n }\r\n me.toggleSelected(newEl);\r\n } else\r\n // Следующее значение.\r\n if (direction == 1) {\r\n newEl = selEl.next();\r\n if (newEl.length == 0) {\r\n newEl = selEl.parent().find('tr:first');\r\n }\r\n me.toggleSelected(newEl);\r\n }\r\n }\r\n },\r\n\r\n // Снимает выделение со всех значений, и устанавливает у переданного.\r\n toggleSelected: function (el) {\r\n el.parent().find('.rs_tr_over').removeClass('rs_tr_over');\r\n el.addClass('rs_tr_over');\r\n },\r\n\r\n // Показывает выбор значения.\r\n show: function () {\r\n var me = this;\r\n\r\n // Если не активен input, то не показываем выпадающее меню.\r\n if (me.inp.hasClass('Req_Disabled')) return;\r\n\r\n // Фильтр для отображения элементов списка.\r\n var keyFilter = null;\r\n var tmp = me.inp.data('filter');\r\n if (typeof tmp != 'undefined') {\r\n keyFilter = tmp.split(';');\r\n me.results = null;\r\n }\r\n\r\n if (!me.results) {\r\n var html = '
';\r\n var hasItems = false;\r\n for (var i = 0, j = 0, c = me.keyvalues.length; i < c; i++) {\r\n if (me.keyvalues[i][0] != \"-1\") {\r\n if (keyFilter == null || (keyFilter != null && $.inArray(me.keyvalues[i][0], keyFilter) != -1)) {\r\n html += '';\r\n hasItems = true;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n if (!hasItems) {\r\n html += '';\r\n };\r\n\r\n html += '
' + me.keyvalues[i][2] + '
' + L(\"NO_ITEMS_FOUND\") + '
';\r\n me.results = $(html).appendTo(\"body\");\r\n\r\n if (hasItems) {\r\n // Навешиваем события на строки.\r\n me.results.find('tr:not(.disabled)')\r\n .hover(function () { $(this).addClass('rs_tr_over'); }, function () { $(this).parent().find('.rs_tr_over').removeClass('rs_tr_over'); })\r\n .unbind('click.DropDownList').bind('click.DropDownList', function () {\r\n me.selectCurrent(this);\r\n });\r\n }\r\n }\r\n\r\n // Устанавливаем положение выпадающего списка.\r\n me.setCoord();\r\n\r\n if (!me.results.is(':visible')) {\r\n\r\n $('.rs_container').hide();\r\n me.results.show();\r\n }\r\n me._isShown = true;\r\n },\r\n\r\n // Событие при выборе значения пользователем.\r\n selectCurrent: function (selectedEl) {\r\n var me = this;\r\n var el;\r\n if (selectedEl == null || typeof selectedEl == 'undefined') {\r\n el = me.results.find('.rs_tr_over');\r\n } else {\r\n el = $(selectedEl);\r\n }\r\n\r\n if (el.length == 1) {\r\n me.setValue(el.attr('data-key'));\r\n }\r\n },\r\n\r\n setInitValue: function () {\r\n return this.setValue(this.initValue);\r\n },\r\n\r\n setPrevValue: function () {\r\n return this.setValue(this.prevValue);\r\n },\r\n\r\n setValue: function (value, displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n var needTriggerResult = (opt_needTriggerResult !== false); //по умолчанию события срабатывает, если поменялось значение.\r\n var valueIsChanged = false;\r\n\r\n if (typeof displayValue === 'undefined') {\r\n for (var i = 0; i < me.keyvalues.length; i++) {\r\n if (me.keyvalues[i][0] === value.escapeHtml()) {\r\n me.prevValue = me.hidd.val();\r\n\r\n me.inp.val(me.keyvalues[i][1]);\r\n me.hidd.val(value);\r\n\r\n valueIsChanged = true;\r\n \r\n break;\r\n }\r\n }\r\n } else {\r\n me.prevValue = me.hidd.val();\r\n me.inp.val(displayValue);\r\n me.hidd.val(value);\r\n valueIsChanged = true;\r\n }\r\n\r\n if (needTriggerResult && valueIsChanged) {\r\n me.inp.change(); //change вызываем явно, т.к. оно не вызывается при установке val(), а в мастерах действия навешивается это событие\r\n me.inp.removeClass(\"placeholderInInput\");\r\n var v = me.hidd.val();\r\n if (me.onAfterChange) me.onAfterChange(v);\r\n me.inp.trigger('result', [v]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n getValue: function () {\r\n return this.hidd.val();\r\n },\r\n\r\n getDisplayValue: function () {\r\n var me = this;\r\n if (me.inp.hasClass('placeholderInInput')) {\r\n return '';\r\n } else {\r\n return me.inp.val();\r\n }\r\n },\r\n \r\n clearDropDownListItems: function () {\r\n this.keyvalues = [];\r\n if (!!this.results) this.results.remove();\r\n this.results = null;\r\n return this;\r\n },\r\n\r\n\r\n addDropDownListItem: function (item) {\r\n this.keyvalues.push(item);\r\n if (!!this.results) this.results.remove();\r\n this.results = null;\r\n return this;\r\n },\r\n\r\n removeDropDownListItem: function (key) {\r\n var me = this;\r\n for (var i = 0; i < me.keyvalues.length; i++) {\r\n if (me.keyvalues[i][0] === key) {\r\n me.keyvalues[i][0] = '-1';\r\n if (!!this.results) this.results.remove();\r\n this.results = null;\r\n break;\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n // Скрывает выбор значения.\r\n hide: function () {\r\n if (this.results) this.results.hide();\r\n this._isShown = false;\r\n return this;\r\n },\r\n\r\n disable: function () {\r\n this.inp.addClass('Req_Disabled');\r\n return this;\r\n },\r\n\r\n enable: function () {\r\n this.inp.removeClass('Req_Disabled');\r\n return this;\r\n },\r\n\r\n setCoord: function () {\r\n var me = this;\r\n var c = me.inp;\r\n\r\n var top = c.offset().top + c.height() + 6;\r\n var height = me.results.outerHeight();\r\n var wh = $(window).height();\r\n if ((top + height) > wh) {\r\n top = c.offset().top - height - 1;\r\n if (top < 0) top = 0;\r\n }\r\n\r\n me.results.css({\r\n left: (c.offset().left + 1),\r\n top: top,\r\n width: Math.max(c.width() - 10, 130),\r\n minWidth: me.inp.outerWidth(true) - 5\r\n });\r\n }\r\n\r\n };\r\n\r\n // Регистрируем плагин jQuery.\r\n $.fn.extend({\r\n DropDown: function (img, hidd, keyvalues, opt) {\r\n this.data('DropDownListInstance', new DropDownList($(this), img, hidd, keyvalues, opt));\r\n this.trigger('Init');\r\n return this;\r\n },\r\n HidePickContainer: function () {\r\n this.data('DropDownListInstance').hide();\r\n return this;\r\n }\r\n });\r\n})(jQuery);\r\n","var g_RightsChanged = 0;\r\n\r\nfunction UserRightInit(ClientID, ObjectID, HashCode, Msg, IsNeedHideTree) {\r\n var jRightsTable = $('.Rights');\r\n var updateTree = function (event, hideFilterView) {\r\n if (IsNeedHideTree) {\r\n if (hideFilterView) $('#Filter_User_View_' + ClientID).hide();\r\n var rootUl = $('#ul' + ClientID).empty();\r\n rootUl.treeview({\r\n url: \"/UserList.asmx/GetUsers\",\r\n collapsed: true,\r\n ajax: {\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n dataWS: \"'ObjectID':\" + ObjectID + \", 'ObjectType':\" + HashCode + \",'Filtrator':'' \",\r\n async: true,\r\n cache: false,\r\n type: \"post\",\r\n onAfterSuccess: function (el, cont) {\r\n $(el).find('.hint').each(function () {\r\n InitAdditionalInfoTooltip($(this));\r\n });\r\n MarkAllGroupsAndUsers(jRightsTable);\r\n $('#spinnerDiv').hide();\r\n if ($('#0').children('ul').children().length == 0) {\r\n $('#ShowingTreeError').show();\r\n } else {\r\n $('#ShowingTreeError').hide();\r\n }\r\n\r\n $('#scroller').height('auto');\r\n\r\n if ($.ipad || WA.ENV.isAndroid()) {\r\n InitTabletContextMenu($('.Rights_List_div:not(#g_0)', el));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n jRightsTable.delegate('.Rights_List_div', 'mouseover', UserInTreeMouseOver);\r\n jRightsTable.delegate('.Rights_List_div', 'mouseout', UserInTreeMouseOut);\r\n jRightsTable.delegate('.Rights_Table tr', 'mouseover', UserRightsMouseOver);\r\n jRightsTable.delegate('.Rights_Table tr', 'mouseout', UserRightsMouseOut);\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n jRightsTable.undelegate('.Rights_List_div > span', 'contextmenu').delegate('.Rights_List_div:not(#g_0) > span', 'contextmenu', UserListShowContextMenu);\r\n } else {\r\n var contextmenuButton = '';\r\n $('.Rights_List_div:not(#g_0)', jRightsTable).find('p.icon').before(contextmenuButton).prev().unbind('click').bind('click', UserListShowContextMenu);\r\n }\r\n InitRightsUserTreeKeyNavigation();\r\n // Шамов А.: keydown сделано специально, т.к. на keyup не блокируется Enter.\r\n var filterInput = $('#Filter_User_' + ClientID);\r\n filterInput.keydown(function (ev) {\r\n if (ev.keyCode == 9) {\r\n filterInput.blur();\r\n var firstItem = $('.Rights_List_div:visible:first', '.Rights_User_List');\r\n if (firstItem.length == 0) firstItem = $('.Rights_User_List').find('ul').find('.Rights_List_div:visible:first');\r\n UserInTreeMouseOver({ currentTarget: firstItem });\r\n } else {\r\n return FilterUserAjax(ev, 'ul' + ClientID, 'Filter_User_View_' + ClientID, ObjectID, HashCode, this, Msg);\r\n }\r\n });\r\n };\r\n\r\n // Изменились ли права, чтобы при переходе на другую вкладку руннуться на сохраненные данные.\r\n jRightsTable.on('rightsChange', function () {\r\n g_RightsChanged = 1;\r\n });\r\n\r\n jRightsTable.on('reload.UserTree', updateTree);\r\n updateTree(null, true);\r\n}\r\n\r\nfunction CheckIfFavoritesEmpty(favGroup) {\r\n if (favGroup.children('ul').children().length > 0) {\r\n $('#ShowingTreeError').hide();\r\n }\r\n else {\r\n if ($('.treeview:visible').length > 0) {\r\n favGroup.attr('class', '');\r\n $('#ShowingTreeError').show();\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction fillTree(res) {\r\n var html = \"\";\r\n if (res.Error == null) {\r\n if (res.Result.length > 0) {\r\n var nodes = res.Result;\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].id > 0) {\r\n html += buildTreeNodeHTML(nodes[i]);\r\n }\r\n else {\r\n //this.showGroupsListMessage(nodes[i].text);\r\n }\r\n }\r\n }\r\n }\r\n return html;\r\n}\r\n\r\nfunction buildTreeNodeHTML(node) {\r\n var html = node.text;\r\n return html;\r\n}\r\n\r\nfunction MarkAllGroupsAndUsers(RightsTable) {\r\n var selectedIDs = $('[name=__SELECTED_USERS]').val().split(';');\r\n for (var i = 0; i < selectedIDs.length; i++) {\r\n var id = selectedIDs[i].split('-')[0];\r\n if (id != \"\") MarkUser(RightsTable.find('#' + id), true);\r\n }\r\n}\r\n\r\nfunction InitTabletContextMenu(items) {\r\n if (items.find('.tabletcontextm').length > 0) {\r\n items.find('.tabletcontextm').unbind('click').bind('click', UserListShowContextMenu);\r\n } else {\r\n var contextmenuButton = '';\r\n items.find('p.icon').before(contextmenuButton).prev().unbind('click').bind('click', UserListShowContextMenu);\r\n }\r\n}\r\n\r\nfunction UserListShowContextMenu(e) {\r\n e.preventDefault(); e.stopPropagation();\r\n var currObj = $(this);\r\n if (!currObj.attr('id')) currObj = currObj.parents('.Rights_List_div:first');\r\n var menu = _GetContextMenu(currObj, $('#0'));\r\n menu.showAt({ 'left': e.pageX, 'top': e.pageY });\r\n}\r\n\r\n// получает объект контекстного меню для элемента дерева\r\nfunction _GetContextMenu(item, favoritesGroup) {\r\n var menuItems = [];\r\n var addMenuItemText;\r\n var addClickHandler;\r\n var favoritesMenuItemText;\r\n var favoritesClickHandler;\r\n var favoritesIcon = \"folderFavorites-16\";\r\n var itemID = item.attr('id');\r\n var actionIcon;\r\n var liID = itemID;\r\n if (itemID[0] == 'g') { liID = itemID.substr(2); }\r\n if (favoritesGroup.children('ul').children('#' + liID).length > 0 || item.hasClass('favorite')) {\r\n favoritesMenuItemText = L(\"REMOVE_FROM_FAVORITES\");\r\n favoritesClickHandler = function () {\r\n addOrRemoveFavorites(item, itemID, false, favoritesGroup);\r\n };\r\n favoritesIcon = \"deleteFromFavourites-16\";\r\n }\r\n else {\r\n favoritesMenuItemText = L(\"ADD_TO_FAVORITES\");\r\n favoritesClickHandler = function () {\r\n addOrRemoveFavorites(item, itemID, true, favoritesGroup);\r\n };\r\n }\r\n if (IsSelected(itemID)) {\r\n // то элемент уже выбран\r\n addMenuItemText = L(\"USERGROUP_EXCLUDE\");\r\n addClickHandler = function () {\r\n $('.Rights_Table').find('tr[id$=' + itemID + ']').find('p:first').trigger('click');\r\n };\r\n actionIcon = \"unchooseRecord-16\";\r\n }\r\n else {\r\n addMenuItemText = L(\"USERGROUP_INCLUDE\");\r\n addClickHandler = function () { AddUserByDiv(item); MarkUser(item, true); };\r\n actionIcon = \"chooseRecord-16\";\r\n }\r\n\r\n menuItems.push({ text: addMenuItemText, onClick: addClickHandler, icon: actionIcon });\r\n menuItems.push({ text: favoritesMenuItemText, onClick: favoritesClickHandler, icon: favoritesIcon });\r\n\r\n var menu = new ContextMenu(menuItems, { width: \"auto\" });\r\n var proxy = { id: item.attr('id'), kind: 'ref', refcode: WA.CR.getReferenceCode(), elem: item, tr: item };\r\n menu.self = proxy\r\n return menu\r\n}\r\n\r\n// Добавление или удаление пользователей из избранного\r\n// item - элемент, который надо добавить\r\n// needToAdd - нужно ли добавить или удалить\r\nfunction addOrRemoveFavorites(item, itemId, needToAdd, favoritesGroup) {\r\n var liID = itemId;\r\n var isGroup = false;\r\n if (itemId[0] == 'g') { liID = itemId.substr(2); isGroup = true; }\r\n CallService(\"/UserList.asmx/AddOrRemoveFavorites\", { PrincipalID: liID, IsGroup: isGroup, NeedToAdd: needToAdd },\r\n function (res) {\r\n if (res.Success) {\r\n var favGroupUl = favoritesGroup.children('ul');\r\n if (favGroupUl.length == 0) {\r\n favGroupUl = $('
    ');\r\n favoritesGroup.append(favGroupUl);\r\n }\r\n if (needToAdd) {\r\n if (favGroupUl.children('#' + liID).length == 0) {\r\n var clone;\r\n if (item.parent('.Filter_User_View').length > 0) {\r\n ReloadFavoritesGroup(favoritesGroup, favGroupUl);\r\n }\r\n else {\r\n clone = item.parent().parent().clone();\r\n initTreeViewItemEvents(clone);\r\n clone.appendTo(favGroupUl);\r\n clone.removeClass('collapsable');\r\n clone.find('.collapsable').removeClass('collapsable');\r\n if (favGroupUl.children().length == 1) {\r\n if (favoritesGroup.children('.hitarea').length == 0) {\r\n favoritesGroup.prepend('
    ');\r\n }\r\n $('.treeview').treeview({ add: favoritesGroup });\r\n } else {\r\n $('.treeview').treeview({ add: clone });\r\n }\r\n }\r\n markUnmarkItemAsFavorite(itemId, needToAdd);\r\n }\r\n }\r\n else {\r\n favGroupUl.children('li#' + liID).remove();\r\n markUnmarkItemAsFavorite(itemId, needToAdd);\r\n }\r\n CheckIfFavoritesEmpty(favoritesGroup);\r\n }\r\n });\r\n}\r\n\r\nfunction ReloadFavoritesGroup(favoritesGroup, favGroupUl) {\r\n //var hitArea = favoritesGroup.children('.hitarea');\r\n // if (hitArea.length > 0) {\r\n // favoritesGroup.removeClass('open').addClass('hasChildren');\r\n // favGroupUl.empty();\r\n // hitArea.click().click();\r\n // favoritesGroup.hasClass('expandable') ? favGroupUl.hide() : favGroupUl.show();\r\n // } else {\r\n $('.Rights').data('needUpdTree', true);\r\n //}\r\n}\r\n\r\nfunction initTreeViewItemEvents(item) {\r\n var span = item.find('.Rights_List_div')\r\n .bind('mouseover', UserInTreeMouseOver)\r\n .bind('mouseout', UserInTreeMouseOut)\r\n .on('click', function () {\r\n var el = $(this);\r\n AddUserByDiv(el);\r\n MarkUser(el, true);\r\n })\r\n .children('span');\r\n if ($.ipad || WA.ENV.isAndroid()) {\r\n InitTabletContextMenu(item.find('.Rights_List_div'));\r\n } else {\r\n span.bind('contextmenu', UserListShowContextMenu);\r\n }\r\n}\r\n\r\nfunction AddFavoritesToRightsTable(el) {\r\n $(el).parent().siblings('ul').children().find('.Rights_List_div:first').click();\r\n}\r\n\r\nfunction IsSelected(ItemId) {\r\n var selectedIDs = $('[name=__SELECTED_USERS]').val().split(';');\r\n var isSelected = false;\r\n for (var i = 0; i < selectedIDs.length; i++) {\r\n var id = selectedIDs[i].split('-')[0];\r\n if (id == ItemId) isSelected = true;\r\n }\r\n return isSelected;\r\n}\r\n\r\n// Помечает или снимает отметку избранных пользователей или групп\r\n// isFavorite - признак пометить как избранное или нет\r\nfunction markUnmarkItemAsFavorite(id, isFavorite) {\r\n if (id) {\r\n var item = $('.treeview').children(':not(#0)').find('#' + id).add($('.Filter_User_View').find('#' + id));\r\n var icon = item.children('span').find('p.icon');\r\n var isGroup = id[0] == 'g';\r\n var iconClass = isGroup ? 'user-tree__icon_group' : 'user-tree__icon_user';\r\n var isSelected = IsSelected(id);\r\n\r\n if (isFavorite) {\r\n if (id[0] != 'g') { // если это пользователь\r\n if (!isSelected) { // у выбранных записей иконки не меняем\r\n icon.removeClass(iconClass).addClass('user-tree__icon_fav-user');\r\n }\r\n } // если это группа\r\n else {\r\n if (!isSelected) {\r\n icon.removeClass('user-tree__icon_group').addClass('user-tree__icon_fav-group');\r\n }\r\n }\r\n item.addClass('favorite');\r\n }\r\n else {\r\n if (id[0] != 'g') { // если это пользователь\r\n if (!isSelected) { // у выбранных записей иконки не меняем\r\n icon.removeClass('user-tree__icon_fav-user').addClass(iconClass);\r\n }\r\n } // если это группа\r\n else {\r\n if (!isSelected) {\r\n icon.removeClass('user-tree__icon_fav-group').addClass('user-tree__icon_group');\r\n }\r\n }\r\n item.find('.favorite').removeClass('favorite');\r\n item.removeClass('favorite');\r\n }\r\n }\r\n}\r\n\r\nfunction UserRightTreeInit(ClientID, ObjectID, GetHashCode) {\r\n $('#ul>' + ClientID).treeview({\r\n url: \"/UserList.asmx/GetUsers\",\r\n collapsed: true,\r\n ajax: {\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n dataWS: \"'ObjectID':'\" + ObjectID + \"','ObjectType':'\" + GetHashCode + \"','Filtrator':''\",\r\n async: true,\r\n cache: false,\r\n type: \"post\"\r\n }\r\n });\r\n\r\n // Событие при наведении на элемент дерева.\r\n $('.treeview div').live('mouseover', function () { $(this).addClass('over'); });\r\n $('.treeview div').live('mouseout', function () { $(this).removeClass('over'); });\r\n\r\n setTimeout(SetEvents, 1000);\r\n SetCurrentUsers();\r\n}\r\n\r\n// Функция при наведение мышки на пользователя или группу в дереве.\r\nfunction UserInTreeMouseOver(event) {\r\n var el = event.currentTarget;\r\n $('div.over', '.Rights_User_List').removeClass('over').find('p.treeview_img_action').css('visibility', 'hidden');\r\n if ($(el).length) {\r\n if (!$(el).hasClass(\"marked\")) {\r\n var arrow = $(el).find('p.treeview_img_action');\r\n arrow.css('visibility', 'visible');\r\n //$(el).find('span > div').attr('title', arrow.attr('title'));\r\n }\r\n }\r\n $(el).addClass('over');\r\n}\r\n\r\n// Функция при отведение мышки с пользователя или группы в дереве.\r\nfunction UserInTreeMouseOut(event) {\r\n $('div.over', '.treeview').removeClass('over').find('p.treeview_img_action').css('visibility', 'hidden');\r\n var el = event.currentTarget;\r\n $(el).find('p.treeview_img_action').css('visibility', 'hidden');\r\n // $(el).find('span > div').attr('title', '');\r\n $(el).removeClass('over');\r\n}\r\n\r\n// Клик на кружочке.\r\nfunction SetRightChoose(elem) {\r\n SetNewRight(elem);\r\n}\r\n\r\nfunction GetUserID(tr) {\r\n var UserID = tr.attr('id');\r\n var prefixIndex = UserID.indexOf('_');\r\n if (prefixIndex != -1) {\r\n UserID = UserID.substr(prefixIndex + 1);\r\n }\r\n return UserID;\r\n}\r\n\r\nvar g_OldChangedUsers = {};\r\n\r\n// Устанавливает права для выбранного пользователя.\r\nfunction SetNewRight(el) {\r\n el = $(el);\r\n var rights = el.attr(\"class\");\r\n var rightsID = el.attr(\"name\");\r\n var tbl = $(el).parentsUntil(\"table\");\r\n var UserID = GetUserID($(tbl[tbl.length - 2]));\r\n var currentRightVal;\r\n\r\n var isOldUser = IsOldUser(UserID); // супер логика для изменения прав, имея неполные права. для пользователей которые уже есть в списке можем только повышать права\r\n\r\n //Проверка полных прав\r\n // не можем менять права пользователей если у них полные,а у нас нет\r\n if (rightsID < g_MaxRightsValue || (el.parent().hasClass(\"full\") && g_MaxRightsValue != 0 && isOldUser)) return; // g_MaxRightsValue - максимальное значение прав, которое может назначить текущий пользователь\r\n if (rightsID > 0 && !GetFullRightsUserCount(UserID)) return ShowInfo(L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\"));\r\n if (el.parent().hasClass(rights)) return;\r\n\r\n // Заменяем у выбранного пользователя права.\r\n var SelUsers = $(\"input[name='__SELECTED_USERS']\");\r\n var oldSelUsers = SelUsers.val().split(';');\r\n for (var i = 0; i < oldSelUsers.length; i++) {\r\n var oldUser = oldSelUsers[i].split('-');\r\n if (oldUser[0] == UserID) {\r\n currentRightVal = oldUser[1];\r\n oldSelUsers[i] = UserID + '-' + rightsID;\r\n break;\r\n }\r\n }\r\n var rightValue = RightsToNumber($.trim(el.parent().attr(\"class\"))); // до своего уровня.\r\n // если у нас нет полных прав и мы пытаемся понизить права пользователя которому они уже назначены\r\n if (g_MaxRightsValue != 0 && rightsID > rightValue && isOldUser && !g_OldChangedUsers[UserID]) return;\r\n // если мы повышали старому пользователю права (до Изменение при передаче прав) и меняем теперь обратно\r\n if (isOldUser && rightsID != rightValue) { g_OldChangedUsers[UserID] ? delete g_OldChangedUsers[UserID] : g_OldChangedUsers[UserID] = 1; }\r\n\r\n el.parent().attr(\"class\", rights).removeClass('disabled'); // окрашиваются кружочки\r\n el.siblings(\"span\").text(L(\"RIGHT_\" + $.trim(el.parent().attr('class').toUpperCase())));\r\n SelUsers.val(oldSelUsers.join(';'));\r\n\r\n $('.Rights').trigger('rightsChange');\r\n}\r\n\r\n// определяет были ли пользователю уже назначены права.\r\n//чтобы при передаче прав юзер не мог менять права тем, кому уже назначены\r\nfunction IsOldUser(UserID) {\r\n var SelUsers = $(\"input[name='__CURRENT_USERS_RIGHTS']\");\r\n var oldSelUsers = SelUsers.val().split(';');\r\n for (var i = 0; i < oldSelUsers.length; i++) {\r\n var oldUser = oldSelUsers[i].split('-');\r\n if (oldUser[0] == UserID) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction RightsToNumber(right) {\r\n switch (right) {\r\n case \"full\": return 0;\r\n case \"change\": return 1;\r\n case \"view\": return 2;\r\n }\r\n}\r\n\r\nfunction IsRightsListValid() {\r\n var SelUsers = $(\"input[name='__SELECTED_USERS']\");\r\n if (SelUsers.length > 0) {\r\n return GetFullRightsUserCount() > 0;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\n//Получает к-во пользователей с полными правами, с учетом изменений.\r\nfunction GetFullRightsUserCount(UserID) {\r\n var SelUsers = $(\"input[name='__SELECTED_USERS']\");\r\n var oldSelUsers = SelUsers.val().split(';');\r\n var fullRightsUserCount = 0;\r\n //Подсчитаем количество пользователей, которые имеют полные права,\r\n for (var i = 0; i < oldSelUsers.length; i++) {\r\n var oldUser = oldSelUsers[i].split('-');\r\n if (oldUser[1] == 0 && oldUser[0] != UserID)++fullRightsUserCount;\r\n }\r\n return fullRightsUserCount;\r\n}\r\n\r\n\r\n// Циклично изменяет права для пользователя.\r\nfunction ChangeRightCycle(elem) {\r\n var sp = $(elem).parent();\r\n var rightsID = sp.children(\".\" + sp.attr(\"class\")).attr(\"name\");\r\n if (rightsID == 0 && g_MaxRightsValue > 0) return;\r\n rightsID -= 1;\r\n if (rightsID < g_MaxRightsValue) rightsID = 2;\r\n sp.children(\"[name='\" + rightsID + \"']\").click();\r\n}\r\n\r\n// Функция при наведении мышки на строку прав.\r\nfunction UserRightsMouseOver(event) {\r\n var el = $(event.currentTarget);\r\n var DelIco = el.find('td:first p');\r\n if (DelIco.length > 0) {\r\n el.addClass('over');\r\n DelIco.css('visibility', 'visible');\r\n }\r\n}\r\n\r\n// Функция при отведение мышки со строки прав.\r\nfunction UserRightsMouseOut(event) {\r\n var el = $(event.currentTarget);\r\n var DelIco = el.find('td:first p');\r\n if (DelIco.length > 0) {\r\n DelIco.css('visibility', 'hidden');\r\n el.removeClass('over');\r\n }\r\n}\r\n\r\n// Удаляет текущего пользователя из прав.\r\nfunction RemoveUserFromRights(elem) {\r\n var el = $(elem);\r\n var tr = el.parent().parent();\r\n\r\n //если пользователь всего один, то удалять его нельзя\r\n if (tr.parent().parent().find('tbody>tr').length <= 2) {\r\n ShowInfo(L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\"));\r\n } else {\r\n var UserID = GetUserID(tr);\r\n // если права не полные, то запретим удалять из списка пользователей которым уже были назначены права\r\n if (g_MaxRightsValue != 0 && IsOldUser(UserID)) return;\r\n var SelUsers = $(\"input[name='__SELECTED_USERS']\");\r\n var oldSelUsers = SelUsers.val().split(';');\r\n\r\n\r\n //Если пользователь с полными правами один и мы его удаляем,\r\n if (!GetFullRightsUserCount(UserID)) return ShowInfo(L(\"WARN_EMPRY_RIGHTS_ISNOT_VALID\"));\r\n // Удяляет выбранного пользователя из права.\r\n for (var i = 0; i < oldSelUsers.length; i++) {\r\n var oldUser = oldSelUsers[i].split('-');\r\n if (oldUser[0] == UserID) {\r\n oldSelUsers[i] = '';\r\n break;\r\n }\r\n }\r\n\r\n SelUsers.val(oldSelUsers.join(';').replace(';;', ';'));\r\n tr.remove();\r\n\r\n MarkUser($('.Rights').find('div#' + UserID), false);\r\n }\r\n\r\n\r\n $('.Rights').trigger('rightsChange');\r\n}\r\n\r\nfunction MarkUser(el, mark) {\r\n if (el.length > 0) {\r\n if (el.hasClass('bubble')) {\r\n // Если выбран показываем галочку.\r\n if (mark) {\r\n el.unbind('mouseenter mouseleave').children('i').attr('title', '');\r\n } else {\r\n // Если нет, то при наведении показываем стрелочку для добавления пользователя в права.\r\n el\r\n .hover(function () {\r\n $(this).children('i').show();\r\n }, function () {\r\n $(this).children('i').hide();\r\n })\r\n .children('i')\r\n .removeClass('TaskAndJob/PerformJob_16.png').addClass('Rights_AddUserOrGroup.png')\r\n .attr('title', L('ADD'))\r\n .hide()\r\n .one('click.Rights', function () { //событие click уберется после первого клика по стрелочке\r\n AddUserByDiv(el.data('div'));\r\n MarkUser(el, true);\r\n });\r\n }\r\n } else {\r\n el = $('.Rights').find('div#' + el.attr('id')); // находим все такие элементы в дереве\r\n if (el.length > 0) {\r\n var img = el.find('p.icon');\r\n if (el.attr('id').charAt(0) != 'g') // user\r\n {\r\n if (mark) {\r\n img.removeClass('user-tree__icon_user').removeClass('user-tree__icon_fav-user').addClass('user-tree__icon_selected-user');\r\n el.addClass('marked');\r\n } else {\r\n img.removeClass('user-tree__icon_selected-user').addClass(el.hasClass('favorite') ? 'user-tree__icon_fav-user' : 'user-tree__icon_user');\r\n $('.treeview > #0').find('.user-tree__icon_fav-user').removeClass('user-tree__icon_fav-user').addClass('user-tree__icon_user');\r\n el.removeClass('marked');\r\n }\r\n } else { // group\r\n if (mark) {\r\n img.removeClass('user-tree__icon_group').removeClass('user-tree__icon_fav-group').addClass('user-tree__icon_selected-group');\r\n el.addClass('marked');\r\n } else {\r\n img.removeClass('user-tree__icon_selected-group').addClass(el.hasClass('favorite') ? 'user-tree__icon_fav-group' : 'user-tree__icon_group');\r\n $('.treeview > #0').children('ul').find('.user-tree__icon_fav-group').removeClass('user-tree__icon_fav-group').addClass('user-tree__icon_group');\r\n el.removeClass('marked');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Добавляет пользователя.\r\nfunction AddUserByDiv(elem) {\r\n var el = $(elem);\r\n var NewUserID = el.attr('id');\r\n var NewUserName = el.find('span > div').text();\r\n\r\n var table = $('.Rights_Table');\r\n var lastFilledRow = table.find('tr:last');\r\n\r\n if (table.find(`tr#new_${NewUserID},tr#current_${NewUserID}`).length) {\r\n // не добавляем юзеров несколько раз\r\n return false;\r\n }\r\n\r\n $('.Rights').trigger('rightsChange');\r\n\r\n MarkUser(el, true);\r\n\r\n // Для добавляемых пользователей по умолчанию права только на чтение.\r\n const NewUserRight = 2;\r\n\r\n let newRow = lastFilledRow.clone(true);\r\n newRow.attr('id', 'new_' + NewUserID);\r\n\r\n // на случай если включено делегирование прав\r\n let jRemoveButton = newRow.find('svg:first');\r\n jRemoveButton.attr('title', L('REMOVE_FROM_RIGHTS_LIST'));\r\n try {\r\n jRemoveButton[0].classList.remove('disabled');\r\n } catch(e) {}\r\n\r\n let jCircleCell = newRow.find('td:last');\r\n jCircleCell.attr('title', L('PUSH_TO_CHANGE_TYPE_RIGHT'));\r\n\r\n // При копировании последней заполненной, копируются и стили disabled.\r\n // Снимем их в соответствии с максимально возможными для назначения правами.\r\n $.each(jCircleCell.find('svg'), (index, element) => {\r\n let jCellElement = $(element);\r\n let circleRight = +jCellElement.attr('name');\r\n if (circleRight >= g_MaxRightsValue) {\r\n jCellElement.removeClass('disabled');\r\n jCellElement.attr('title', '');\r\n } else {\r\n jCellElement.addClass('disabled');\r\n jCellElement.attr('title', L('CANNOT_ASSIGN_RIGHTS_HIGHER'));\r\n }\r\n });\r\n jCircleCell.find('span').removeClass('disabled');\r\n\r\n var newRow_div = newRow.find('td div').text(NewUserName);\r\n lastFilledRow.after(newRow.show());\r\n\r\n //Подсказка\r\n var hintData = getHintDataObj(el);\r\n if (typeof hintData !== 'undefined') {\r\n // Подсказка есть, значит НЕ надо показать обычный title.\r\n newRow_div.removeAttr('title');\r\n\r\n var hint = newRow.find('.Rights_Table_td');\r\n hint.removeClass('hintInit').qtip('hide').removeAttr('data-hint').data('data-hint', hintData)\r\n InitAdditionalInfoTooltip(hint);\r\n } else {\r\n // Подсказки нет, значит надо показать обычный title.\r\n newRow_div.attr('title', NewUserName);\r\n var rightsCell = newRow.find('.Rights_Table_td');\r\n rightsCell.removeClass('hint').removeClass('hintInit').qtip('hide').qtip('destroy');\r\n rightsCell.removeAttr(\"data-hint\");\r\n }\r\n\r\n // Переинициализируем подсказки.\r\n newRow.parent().find('.hint').each(function () {\r\n $(this).removeClass('hintInit').qtip('hide');\r\n InitAdditionalInfoTooltip($(this));\r\n });\r\n\r\n SetNewRight(newRow.find('td:last svg:first'), NewUserRight);\r\n\r\n var SelUsers = $(\"input[name='__SELECTED_USERS']\");\r\n var oldSelUsers = SelUsers.val();\r\n SelUsers.val(oldSelUsers + NewUserID + '-' + NewUserRight + ';');\r\n\r\n return true;\r\n}\r\n\r\n/* =Фильтрация пользователей в правах================================================================================================================== */\r\nvar UserFilterTTimeout;\r\nfunction ClearInputFilterUser(el) {\r\n if (!$.ipad) {\r\n if ($(el).hasClass('Req_Gray')) {\r\n $(el).removeClass('Req_Gray');\r\n $(el).val('');\r\n }\r\n } else {\r\n $(el).trigger('keyup');\r\n }\r\n}\r\nfunction SetDefaultFilterValue(el, value) {\r\n if (!$.ipad) {\r\n if ($(el).val().length == 0) {\r\n $(el).val(value);\r\n $(el).addClass('Req_Gray');\r\n }\r\n }\r\n}\r\n\r\nfunction FilterUser(idSrc, idDest, el) {\r\n clearTimeout(UserFilterTTimeout);\r\n UserFilterTTimeout = setTimeout(function () { DoFilter(idSrc, idDest, el); }, 400);\r\n}\r\nfunction DoFilter(idSrc, idDest, el) {\r\n var elJq = $(el);\r\n var value = $.trim(elJq.val());\r\n if (value.length != 0) {\r\n $('#' + idDest).empty();\r\n var GlobalFilterUser = \"\";\r\n $('#' + idSrc + ' span[innerHTML]').each(function () {\r\n if (($(this).attr('innerHTML').toUpperCase().indexOf(value.toUpperCase()) != -1) && ($(this).parent().attr('id').split('g_').length == 1)) {\r\n var div = $(this).parent();\r\n if (GlobalFilterUser.indexOf(div.attr('id')) == -1) {\r\n var cloneDiv = div.clone(true);\r\n $('#' + idDest).append(cloneDiv);\r\n GlobalFilterUser = GlobalFilterUser + div.attr('id') + \";\";\r\n }\r\n }\r\n });\r\n $('#' + idDest).show();\r\n $('#' + idSrc).hide();\r\n }\r\n else {\r\n $('#' + idDest).empty().hide();\r\n $('#' + idSrc).show();\r\n }\r\n}\r\n\r\nfunction FilterUserAjax(ev, UserTreeId, FilterAreaId, ObjectID, ObjectType, el, defvalue) {\r\n clearInlineHint(el);\r\n clearTimeout(UserFilterTTimeout);\r\n UserFilterTTimeout = setTimeout(function () { AjaxUserSearch(UserTreeId, FilterAreaId, ObjectID, ObjectType, el, defvalue); }, 400);\r\n return ev.keyCode != 13;\r\n}\r\n\r\n//Поиск пользователей с помощью ajax.\r\nfunction AjaxUserSearch(UserTreeId, FilterAreaId, ObjectID, ObjectType, el, defvalue) {\r\n var elJq = $(el);\r\n var value = $.trim(elJq.val());\r\n if (value.length != 0 && value != defvalue) {\r\n\r\n if (Core.isStatisticEnabled) {\r\n ///Запись в статистику\r\n WA.CR.statistics.write({\r\n page: WA.getLocation(),\r\n action: \"FilterQuery\",\r\n area: 'UsersTree',\r\n target: elJq.get(0)\r\n });\r\n };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/UserList.asmx/GetUsers\",\r\n data: \"{'ObjectID':\" + ObjectID + \", 'ObjectType':\" + ObjectType + \", 'FolderID':'', 'Filtrator':'\" + value + \"'}\",\r\n async: true,\r\n cache: false,\r\n success: function (res) {\r\n var FilterArea = $('#' + FilterAreaId);\r\n $('#' + UserTreeId).hide();\r\n $('#ShowingTreeError').hide();\r\n\r\n var SelUsers = ';' + $(\"input[name='__SELECTED_USERS']\").val();\r\n\r\n FilterArea.empty().show();\r\n\r\n if (res.d.Result.length == 0) {\r\n FilterArea.append('
    ' + L('EMPTY_WITH_FILTER') + '
    ');\r\n } else {\r\n $(res.d.Result).each(function () {\r\n var currUser = this;\r\n var itemId = currUser.id;\r\n if (currUser.isGroup) itemId = 'g_' + itemId;\r\n var isSelected = (SelUsers.indexOf(';' + itemId + '-') != -1);\r\n var u;\r\n if (currUser.id > -1) {\r\n if (currUser.hint == null) {\r\n // Подсказки НЕ настроены.\r\n u = $(currUser.text);\r\n if (u.hasClass('hint')) {\r\n u.each(function () {\r\n InitAdditionalInfoTooltip($(this));\r\n });\r\n }\r\n MarkUser(u, isSelected);\r\n } else {\r\n // Подсказки настроены.\r\n u = $(GenerateAdditionalInfoTooltipHtml(currUser.hint));\r\n u.attr('id', itemId).data('div', currUser.text).append('');\r\n MarkUser(u, isSelected);\r\n }\r\n } else {\r\n // -1 - сообщение об ошибке.\r\n if (this.text) {\r\n u = $('
    ' + (currUser.text) + '
    ');\r\n } else {\r\n u = null;\r\n }\r\n }\r\n if (u) {\r\n FilterArea.append(u);\r\n }\r\n });\r\n if ($.ipad || WA.ENV.isAndroid()) {\r\n InitTabletContextMenu(FilterArea.find('.Rights_List_div'));\r\n }\r\n MarkAllGroupsAndUsers($('.Rights'));\r\n };\r\n }\r\n });\r\n } else {\r\n $('#' + UserTreeId).show();\r\n CheckIfFavoritesEmpty($('li#0'));\r\n var rightsTable = $('.Rights');\r\n if (rightsTable.data('needUpdTree') == true) {\r\n rightsTable.trigger('reload.UserTree', [false]);\r\n rightsTable.data('needUpdTree', null);\r\n }\r\n $('#' + FilterAreaId).hide();\r\n }\r\n}\r\n\r\nfunction InitRightsUserTreeKeyNavigation() {\r\n var tree = $('ul.treeview:visible');\r\n var filterResults = $('.Filter_User_View');\r\n var mainContent = $('#scroller');\r\n var rightsTable = $('.Rights_Table');\r\n var rightsUserList = $('.Rights_User_List');\r\n if (!$.ipad) {\r\n mainContent.height(mainContent.parent().parent().height()).css('overflow', 'auto');\r\n }\r\n\r\n var UpDownKeyNavigation = function (down) {\r\n if (tree.length > 0 && tree.css('display') != \"none\") {\r\n var currentItem = tree.find('div.over').parents('li:first');\r\n if (currentItem.length) {\r\n // от текущего элемента делаем поиск в 3-х направлениях: в дочерних элементах, в следующих элементах на уровень выше и в элементах того же уровня\r\n var nextItem;\r\n if (down) {\r\n nextItem = currentItem.find('li:visible:first');\r\n if (nextItem.length == 0) { // если не нашли внизу\r\n nextItem = FindSiblingOrParent(currentItem, down);\r\n }\r\n }\r\n else {\r\n nextItem = FindSiblingOrParent(currentItem, down);\r\n }\r\n if (nextItem.length) {\r\n UnhoverAllItems();\r\n HoverItem(nextItem);\r\n ScrollToHoveredItem(nextItem, down);\r\n }\r\n }\r\n else {\r\n if (down) {\r\n HoverItem(tree.find('li:visible:first'));\r\n mainContent.scrollTop(0);\r\n }\r\n else {\r\n HoverItem(tree.find('li:visible:last'));\r\n mainContent.scrollTop(100000);\r\n }\r\n }\r\n }\r\n else {\r\n var currentItem = filterResults.find('div.over');\r\n if (currentItem.length) {\r\n var nextItem;\r\n if (down) {\r\n nextItem = currentItem.next('.Rights_List_div');\r\n }\r\n else {\r\n nextItem = currentItem.prev();\r\n }\r\n if (!nextItem.length) nextItem = currentItem;\r\n UnhoverAllItems();\r\n HoverItem(nextItem);\r\n ScrollToHoveredItem(nextItem, down);\r\n }\r\n else {\r\n if (down) {\r\n HoverItem(filterResults.children('div:first:visible'));\r\n mainContent.scrollTop(0);\r\n }\r\n else {\r\n HoverItem(filterResults.children('div:last:visible'));\r\n mainContent.scrollTop(100000);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var FindSiblingOrParent = function (item, down) {\r\n var nextItem;\r\n if (down) {\r\n nextItem = item.next('li:visible:first'); // ищем след элемент на этом же уровне\r\n if (nextItem.length == 0) { // если не нашли\r\n if (!item.parent('.treeview').length) { // и если родительский элемент это не все дерево, и значит есть куда подниматься выше\r\n nextItem = FindSiblingOrParent(item.parents('li:visible:first'), down); // ищем сиблингов у родителя или его родителей\r\n } else {\r\n nextItem = item;\r\n }\r\n }\r\n } else { // движение вверх\r\n nextItem = item.prev('li:visible:first'); // ищем сперва сиблинга\r\n var sibling = true;\r\n if (nextItem.length == 0) { // если его не нашли и родительский элемент не само дерево, и значит есть куда подниматься выше\r\n if (!item.parent('.treeview').length) {\r\n nextItem = item.parents('li:visible:first'); // то берем родителя\r\n sibling = false;\r\n if (nextItem.length == 0) { // если его не нашли, то пытаемся найти сиблинга родителя или его родителей\r\n nextItem = FindSiblingOrParent(item.parents('li:visible:first'), down);\r\n }\r\n } else { // если родитель - это все дерево, то мы на крайнем элементе и никуда не двигаемся\r\n nextItem = item;\r\n sibling = false;\r\n }\r\n }\r\n if (sibling) { // если нашли сиблинга, то проверяем наличие дочерних узлов и переходим к ним\r\n var subItem = nextItem.find('li:visible:last');\r\n if (subItem.length) {\r\n nextItem = subItem;\r\n }\r\n }\r\n }\r\n return nextItem;\r\n };\r\n\r\n var ExpandOrCollapseGroup = function (expand) {\r\n if (tree.length > 0 && tree.css('display') != \"none\") {\r\n var currentItem = tree.find('div.over').parents('li:visible:first');\r\n if (expand) {\r\n if (currentItem.hasClass('expandable')) {\r\n currentItem.children('div.hitarea').click();\r\n }\r\n } else {\r\n if (currentItem.hasClass('collapsable')) {\r\n currentItem.children('div.hitarea').click();\r\n } else {\r\n if (!currentItem.parent('.treeview').length) {\r\n var parent = currentItem.parents('li:visible:first');\r\n UnhoverAllItems();\r\n HoverItem(parent);\r\n parent.children('div.hitarea').click();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n var ScrollToHoveredItem = function (item, down) {\r\n if (tree.filter(':visible').height() > mainContent.height() ||\r\n (filterResults.height() > mainContent.height() && filterResults.css('display') != \"none\")) {\r\n\r\n var height = 65;\r\n var currentID = item.attr('id');\r\n var lis = tree.filter(':visible').length ? tree.find('li:visible') : filterResults.children('.Rights_List_div');\r\n\r\n\r\n if (down) {\r\n for (var i = lis.length - 1; i >= 0; i--) {\r\n if ($(lis[i]).attr('id') == currentID) {\r\n height += (i + 1) * 24;\r\n break;\r\n }\r\n }\r\n if (mainContent.height() - height < 100) {\r\n mainContent.scrollTop(mainContent.scrollTop() + 24);\r\n }\r\n } else {\r\n for (var i = 0; i < lis.length; i++) {\r\n if ($(lis[i]).attr('id') == currentID) {\r\n height += (i + 1) * 24;\r\n break;\r\n }\r\n }\r\n if (height - mainContent.scrollTop() < 100) {\r\n mainContent.scrollTop(mainContent.scrollTop() - 24);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var HoverItem = function (item) {\r\n UnhoverAllItems();\r\n if (tree.length == 0 || tree.css('display') == \"none\") {\r\n item.filter('div.Rights_List_div:first').addClass('over');\r\n } else {\r\n item.find('div.Rights_List_div:first').addClass('over');\r\n }\r\n if (!item.hasClass('notallshown') && item.length) {\r\n if (item.find('p:first')[0].className.indexOf('Marked') == -1) {\r\n item.find('p.treeview_img_action:first').css('visibility', 'visible');\r\n }\r\n }\r\n };\r\n var UnhoverAllItems = function () {\r\n var title = rightsUserList.find('div.over'); //tree.css('display') == \"none\" ? filterResults.find('div.over') : tree.find('div.over');\r\n if (title.length == 0) title = rightsUserList.find('ul').find('div.over');\r\n title.removeClass('over').find('p.treeview_img_action').css('visibility', 'hidden');\r\n title.parent().removeClass('hover');\r\n };\r\n\r\n var SelectItem = function () {\r\n tree.length == 0 || tree.css('display') == \"none\" ?\r\n filterResults.find('div.over').click() :\r\n tree.find('div.over').click();\r\n };\r\n\r\n var DeselectItem = function () {\r\n var item = tree.length == 0 || tree.css('display') == \"none\" ?\r\n filterResults.find('div.over').click() :\r\n tree.find('div.over').click();\r\n var tr = rightsTable.find('tr[id$=\"_' + item.attr('id') + '\"]');\r\n RemoveUserFromRights(tr.find('td:first').children());\r\n };\r\n\r\n var scope = 'common';\r\n key('down', scope, function () { UpDownKeyNavigation(true); return false; });\r\n key('up', scope, function () { UpDownKeyNavigation(false); return false; });\r\n key('right', scope, function () { ExpandOrCollapseGroup(true); return false; });\r\n key('left', scope, function () { ExpandOrCollapseGroup(false); return false; });\r\n key('enter', scope, function () { SelectItem(); return false; });\r\n key('delete', scope, function () { DeselectItem(); return false; });\r\n key('shift+tab', scope, function () { $(':focus').blur(); $('input.Filter_Text').focus(); UnhoverAllItems(); return false; });\r\n $('input.Filter_Text').focus(function () { ClearInputFilterUser(this); UnhoverAllItems(); });\r\n // key('shift+down', function () { UpDownKeyNavigation(true); return false; });\r\n // key('shift+up', function () { UpDownKeyNavigation(false); return false; });\r\n // key('shift+right', function () { ExpandOrCollapseGroup(true); return false; });\r\n // key('shift+left', function () { ExpandOrCollapseGroup(false); return false; });\r\n // key('shift+enter', function () { SelectItem(); return false; });\r\n // key('shift+delete', function () { DeselectItem(); return false; });\r\n}\r\n","function InitializeSessionRoutiness() {\r\n setTimeout(SessionKeepAlive, SessionUpdateTime);\r\n}\r\n\r\nfunction SessionKeepAlive() {\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: \"/Session.asmx/KeepAlive\",\r\n cache: false,\r\n success: function (data, textStatus, xhr) {\r\n // В мобильной версии WebAccess нет.\r\n try {\r\n if (WebAccess) {\r\n $.when(WA.AgentInit).done(function () {\r\n WebAccess.agent.keepAlive();\r\n });\r\n }\r\n } catch (e) {\r\n console.log('using WebAccess to keep alive the Agent');\r\n }\r\n setTimeout(SessionKeepAlive, SessionUpdateTime);\r\n if (!WA.services._isSessionAlive(xhr.status)) return;\r\n },\r\n error: function (err) {\r\n setTimeout(SessionKeepAlive, SessionUpdateTime);\r\n if (!WA.services._isSessionAlive(err.status)) return;\r\n }\r\n });\r\n}\r\n\r\nfunction ObjLockKeepAlive(url, data) {\r\n var R = false;\r\n var obj = {\r\n timeout: null //чтобы работала передача по сслыке\r\n };\r\n\r\n //TODO Почему синхронные запросы?\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n url: url,\r\n cache: false,\r\n async: false,\r\n data: data,\r\n success: function (res) {\r\n R = res.d;\r\n },\r\n error: function (err) {\r\n obj.timeout = setTimeout(function () { ObjLockKeepAlive.call(ObjLockKeepAlive, url, data) }, LockUpdateTime);\r\n if (!WA.services._isSessionAlive(err.status)) return;\r\n }\r\n });\r\n if (R) {\r\n obj.timeout = setTimeout(function () { ObjLockKeepAlive.call(ObjLockKeepAlive, url, data) }, LockUpdateTime);\r\n }\r\n\r\n return obj;\r\n}\r\n","(function (exports) {\r\n\r\n // Модель Пользователь. Конструктор.\r\n let User = exports.User = function (data) {\r\n _.extend(this, data);\r\n };\r\n\r\n User.prototype.constructor = User;\r\n User.prototype.toString = function () {\r\n return '[object models.User]';\r\n };\r\n\r\n // Получает текущего пользователя.\r\n User.current = function () {\r\n return User._current;\r\n };\r\n\r\n})(window.models || (window.models = {}));\r\n","(function (global) {\r\n\r\n /**\r\n * Коллекция элементов. \r\n * @class WebAccess.Collection\r\n * @param {object} elements Элементы коллекции.\r\n * @since 5.0.0.7100\r\n */\r\n var Collection = Class.extend({\r\n className: \"Collection\",\r\n\r\n /**\r\n * Массив элементов.\r\n * @since 5.0.0.7100\r\n * @private\r\n */\r\n _arr: [],\r\n\r\n /**\r\n * Конструктор.\r\n * @since 5.0.0.7100\r\n * @private\r\n */\r\n init: function (elements) {\r\n this._arr = [];\r\n for (var name in elements) {\r\n this.addElement(name, elements[name]);\r\n }\r\n },\r\n\r\n /**\r\n * Добавляет новый элемент в коллекцию.\r\n * @method WebAccess.Collection#addElement\r\n * @param {string} name Название элемента коллекции.\r\n * @param {object} data Данные элемента коллекции.\r\n * @return {WebAccess.Collection}\r\n * @since 5.0.0.7100\r\n */\r\n addElement: function (name, data) { \r\n this[name] = data;\r\n if (!$.isFunction(data)) this._arr.push(data);\r\n return this;\r\n },\r\n\r\n /**\r\n * Удаляет элемент из коллекции.\r\n * @method WebAccess.Collection#deleteElement\r\n * @param {string} name Название элемента коллекции.\r\n * @return {object} Удаленный элемент.\r\n * @since 5.0.0.7100\r\n */\r\n deleteElement: function (name) {\r\n var me = this;\r\n var deletedElement = null;\r\n if (me[name]) {\r\n deletedElement = me[name];\r\n delete me[name];\r\n\r\n for (var i = 0; i < me._arr.length; i++) {\r\n if (me._arr[i] === deletedElement) {\r\n me._arr.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n return deletedElement;\r\n },\r\n\r\n /**\r\n * Очищает коллекцию.\r\n * @method WebAccess.Collection#clear\r\n * @return {WebAccess.Collection}\r\n */\r\n clear: function () {\r\n var me = this;\r\n for (var name in me) {\r\n if ($.inArray(me[name], me._arr) !== -1) {\r\n delete me[name];\r\n }\r\n }\r\n this._arr = [];\r\n return this;\r\n },\r\n\r\n /**\r\n * Кол-во элементов коллекции\r\n * @method WebAccess.Collection#count\r\n * @return {integer}\r\n */\r\n count: function () {\r\n return this._arr.length;\r\n },\r\n\r\n /**\r\n * Проверяет наличие элемента в коллекции по имени.\r\n * @method WebAccess.Collection#isExist\r\n * @param {string} name Название элемента коллекции.\r\n * @return {Boolean}\r\n */\r\n isExist: function (name) {\r\n return !!this[name];\r\n },\r\n\r\n /**\r\n * Возвращает элементы коллекции в виде массива.\r\n * @method WebAccess.Collection#toArray\r\n * @return {Array}\r\n */\r\n toArray: function () {\r\n return this._arr;\r\n }\r\n\r\n });\r\n\r\n global.Collection = Collection;\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Предоставляет дополнительные методы для работы со ссылками на объекты.\r\n *\r\n * @mixin WebAccess.mixins.linkMixin\r\n * @since 5.0.0.7300\r\n */\r\n var linkMixin = {\r\n\r\n /**\r\n * Открыть ссылку в новом окне.\r\n *\r\n * @method WebAccess.mixins.linkMixin#open\r\n * @return {WebAccess.mixins.link} Объект типа link.\r\n */\r\n open: function () {\r\n var url = this.toURL();\r\n if (this.isNew) {\r\n url.setParam('mode', 'edit');\r\n };\r\n url.open();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Открыть ссылку в desktop-клиенте.\r\n *\r\n * @method WebAccess.mixins.linkMixin#openInDesktop\r\n * @return {WebAccess.mixins.link} Объект типа link.\r\n */\r\n openInDesktop: function () {\r\n var url = this.toURL();\r\n url.setParam('Desktop', 1);\r\n url.setParam('-view');\r\n url.open();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовать ссылку на объект в объект типа WA.URL.\r\n *\r\n * @method WebAccess.mixins.linkMixin#toURL\r\n * @return {WebAccess.URL} Объект типа URL.\r\n */\r\n toURL: function () {\r\n //TODO Шамов А.: Сломается везде, кроме Link, если использовать этот mixin в другом классе.\r\n //Шабардин П.: Да сломается, ну и что расширим URL, в нем для этого нет преград, а других объкетов мы пока не знаем, когда будем делать - тогда и расширим.\r\n var url = new WA.URL(this);\r\n if (this.isNew) {\r\n url.setParam('mode', 'edit');\r\n };\r\n\r\n return url;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовать ссылку на объект в объект типа WebAccess.Models.Link, совместимый с серверной объекной моделью.\r\n *\r\n * @method WebAccess.mixins.linkMixin#toLinkModel\r\n * @return {Object} Объект типа WebAccess.Models.Link.\r\n */\r\n toLinkModel: function () {\r\n return {\r\n ID: this.id,\r\n Kind: objectTypeToString(this.type),\r\n CompCode: this.referenceName\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовать объект типа WebAccess.Models.Link в ссылку.\r\n *\r\n * @method WebAccess.mixins.linkMixin#toLinkModel\r\n * @return {Object} Ссылка на объект.\r\n */\r\n fromLinkModel: function (model) {\r\n if (!model) WA.raise('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED');\r\n this.id = model.ID;\r\n this.type = objectKindToObjectType(model.Kind);\r\n this.referenceName = model.CompCode;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить строковое представление объекта.\r\n *\r\n * @method WebAccess.mixins.linkMixin#asString\r\n * @since 5.0.0.7300 \r\n * @return {string} Строковое представление объекта.\r\n */\r\n asString: function () {\r\n return $.toJSON({\r\n id: this.id,\r\n type: this.type,\r\n referenceName: this.referenceName\r\n });\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n global.linkMixin = linkMixin;\r\n})(window.WebAccess.mixins);","\"use strict\";\r\n(function (global) {\r\n\r\n /** \r\n * Ссылка на объект.\r\n *\r\n * @class WebAccess.Link\r\n * @mixes WebAccess.mixins.linkMixin\r\n * @param {Integer} id Идентификатор объекта\r\n * @param {OBJECT_TYPE} type Тип объекта\r\n * @param {String} [opt_referenceName] Имя справочника\r\n * @property {Integer} id Идентификатор объекта\r\n * @property {OBJECT_TYPE} type Тип объекта\r\n * @property {String} referenceCode Имя справочника\r\n * @property {String} className Имя класса\r\n * @since 5.0.0.7300 \r\n */\r\n var Link = Class.extend([global.mixins.linkMixin], {\r\n className: \"Link\",\r\n id: 0,\r\n type: OBJECT_TYPE.UNKNOWN,\r\n referenceName: null,\r\n isNew: false,\r\n\r\n init: function (id, type, opt_referenceName) {\r\n if (isNaN(id) && typeof id !== 'object') {\r\n this.id = WA.CR.getID();\r\n this.type = WA.CR.getObjectType();\r\n this.referenceName = WA.CR.getReferenceCode();\r\n return this;\r\n }\r\n\r\n if (typeof id === 'object') {\r\n this.id = id['id'];\r\n this.type = id['type'];\r\n this.referenceName = id['referenceName'];\r\n } else {\r\n this.id = id;\r\n this.type = type;\r\n this.referenceName = opt_referenceName;\r\n }\r\n return this;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n });\r\n\r\n global.Link = Link;\r\n})(window.WebAccess);","\"use strict\";\r\n(function (global) {\r\n\r\n /** \r\n * Ссылки.\r\n\r\n * @class WebAccess.URL\r\n * @param {String|WA.Link} url Адрес URL, либо ссылка WA.Link на объект системы.\r\n * @property {String} className Имя класса \r\n * @property {integer} id ИД объекта\r\n * @since 5.0.0.7300\r\n */\r\n var URL = Class.extend({\r\n className: \"URL\",\r\n _url: '',\r\n\r\n init: function (url) {\r\n if (typeof url === 'object' && url.className === 'Link') {\r\n this._url = this._getUrlFromLink(url);\r\n } else {\r\n this._url = url;\r\n }\r\n if (!url) this._url = window.location.href;\r\n this._refresh();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * todo, может когда нибудь в будущем\r\n * @ignore\r\n */\r\n _refresh: function () {\r\n return;\r\n //$.extend(this, new window.URL(this._url));\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открывает URL-ссылку в новом окне.\r\n * Примечание. Браузер Google Chrome блокирует страницы, которые открываются через асинхронный вызов или из потока, \r\n * не имеющего прямого участия с пользователем. Для устранения этой ситуации, используйте пример, представленный ниже.\r\n *\r\n * @method WebAccess.URL#open\r\n * @since 5.0.0.7300\r\n * @return {WebAccess.current.window} Объект типа window.\r\n *\r\n * @example Открытие ссылки в новом окне\r\n * var url = new WA.URL('/Explorer.aspx');\r\n * url.open();\r\n *\r\n * @example Асинхронное открытие объектов\r\n * function createTask() {\r\n * var taskTab = new WA.URL('/PleaseWait.aspx').open(); // Ссылка на указанную веб-страницу открывается.\r\n * WebAccess.factories.tasks.createTask().done(function(task) {\r\n * // Если здесь вызвать task.toURL().open(), то в браузере Google Crome появится уведомление, что всплывающее окно заблокировано.\r\n * task.toURL().openIn(taskTab);\r\n * // Второй вариант: taskTab.location.href = task.toURL();\r\n * });\r\n * };\r\n */\r\n open: function (opt_target) {\r\n opt_target = opt_target || '_blank';\r\n return window.open(this._url, opt_target);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открывает URL-ссылку в указанном окне.\r\n *\r\n * @method WebAccess.URL#openIn\r\n * @param {window} window Окно браузера, в котором необходимо открыть URL-ссылку\r\n * @return {WebAccess.current.window} Объект типа window.\r\n * @since 5.0.0.7300\r\n */\r\n openIn: function (win) {\r\n return win.location.href = this._url;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает параметр URL-ссылки.\r\n *\r\n * @method WebAccess.URL#getParam\r\n * @param {String} paramName Имя параметра\r\n * @return {String} Наименование параметра URL-ссылки.\r\n * @since 5.0.0.7300\r\n */\r\n getParam: function (paramName) {\r\n return this._getParam(paramName, this.asStringWithoutHash());\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить параметр из URL.\r\n *\r\n * @method WebAccess.URL#getParam\r\n * @param {String} paramName Имя параметра\r\n * @since 5.0.0.7300\r\n * @return {String}\r\n * @private\r\n */\r\n _getParam: function (paramName, url) {\r\n var param = this._getNonEncoded(url, paramName);\r\n try {\r\n return decodeURIComponent(param);\r\n } catch (_) {\r\n return param;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает параметр из хеша URL-ссылки.\r\n *\r\n * @method WebAccess.URL#getParamInHash\r\n * @param {String} paramName Имя параметра\r\n * @since 5.0.0.7300\r\n * @return {String} Наименование параметра, полученного из хеша URL-ссылки.\r\n */\r\n getParamInHash: function (paramName) {\r\n return this._getParam(paramName, '?' + this.getHash());\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает или изменяет параметр из хеша URL-ссылки.\r\n *\r\n * @method WebAccess.URL#getParamInHash\r\n * @param {String} paramName Имя параметра\r\n * @since 5.2.0.1100\r\n * @return {String} Наименование параметра, полученного из хеша URL-ссылки.\r\n */\r\n setParamInHash: function (paramName, value) {\r\n var me = this;\r\n var newHash = me._setParam(paramName, value, '?' + me.getHash()).substr(1);\r\n if (newHash.charAt(0) === '&') newHash = newHash.substr(1); //Удаляем лишний & вначале\r\n me._url = me.asStringWithoutHash() + '#' + newHash;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает хеш URL-ссылки.\r\n *\r\n * @method WebAccess.URL#getHash\r\n * @since 5.0.0.7300\r\n * @return {String} Строга, содержащая хеш URL-ссылки.\r\n */\r\n getHash: function () {\r\n var hashIndex = this._url.indexOf('#');\r\n if (hashIndex != -1) {\r\n return this._url.substr(hashIndex + 1);\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает расширение файла.\r\n * @method WebAccess.URL#getExtension\r\n * @since 5.2.0.1100\r\n * @return {String}\r\n */\r\n getExtension: function () {\r\n return WA._getFileExtensionFromURL(this._url);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает строку URL-ссылки без хэш-символов.\r\n * @method WebAccess.URL#asStringWithoutHash\r\n * @since 5.0.0.7300\r\n * @return {String} Строка URL-ссылки без хэш-символов.\r\n */\r\n asStringWithoutHash: function () {\r\n var hashIndex = this._url.indexOf('#');\r\n if (hashIndex != -1) {\r\n return this._url.substr(0, hashIndex);\r\n } else {\r\n return this._url;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает или изменяет параметр URL-ссылки.\r\n *\r\n * @method WebAccess.URL#setParam\r\n * @param {String} paramName Имя параметра\r\n * @param {String} value Новое значение, заданное параметру\r\n * @return {WebAccess.URL} Объект типа URL.\r\n * @since 5.0.0.7300\r\n */\r\n setParam: function (paramName, value) {\r\n var hash = this.getHash(this._url);\r\n\r\n this._url = this._setParam(paramName, value, this.asStringWithoutHash());\r\n if (hash)\r\n this._url = this._url + '#' + hash;\r\n\r\n this._refresh();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает или изменяет параметр URL-ссылки.\r\n *\r\n * @method WebAccess.URL#setParam\r\n * @param {String} paramName Имя параметра\r\n * @param {String} value Новое значение, заданное параметру\r\n * @param {String} url URL-ссылка.\r\n * @return {WebAccess.URL} Объект типа URL.\r\n * @since 5.2.0.1100\r\n * @private\r\n */\r\n _setParam: function (paramName, value, url) {\r\n var newUrl = url;\r\n var re = new RegExp('([\\?|&])' + paramName + '=([^?&]*)', 'i');\r\n var m = re.exec(newUrl);\r\n if (!m) {\r\n newUrl += ((newUrl.indexOf('?') == -1) ? '?' : '&') + paramName + \"=\" + encodeURIComponent(value);\r\n } else {\r\n newUrl = newUrl.replace(re, m[1] + paramName + \"=\" + encodeURIComponent(value));\r\n }\r\n return newUrl;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаляет параметр из URL-ссылки.\r\n *\r\n * @method WebAccess.URL#removeParam\r\n * @param {String} paramName Имя параметра\r\n * @since 5.0.0.7300\r\n * @return {WebAccess.URL} Объект типа URL.\r\n */\r\n removeParam: function (paramName) {\r\n var me = this;\r\n var hash = me.getHash(me._url);\r\n var urlWithoutHash = me.asStringWithoutHash();\r\n var re = new RegExp('([\\?|&]?)' + paramName + '=([^?&]*)', 'ig');\r\n urlWithoutHash = urlWithoutHash.replace(re, \"$1\").replace('?&', '?').replace('&&', '&');\r\n if (urlWithoutHash.charAt(urlWithoutHash.length - 1) === '&') {\r\n urlWithoutHash = urlWithoutHash.substr(0, urlWithoutHash.length - 1);\r\n }\r\n if (hash) {\r\n me._url = urlWithoutHash + '#' + hash;\r\n } else {\r\n me._url = urlWithoutHash;\r\n }\r\n me._refresh();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение не закодированного URL\r\n * @method WebAccess.URL#_getNonEncoded\r\n * @private\r\n * @since 5.0.0.7300\r\n * @return {String}\r\n */\r\n _getNonEncoded: function (url, name) {\r\n name = name.replace(/[\\[]/, \"\\\\\\[\").replace(/[\\]]/, \"\\\\\\]\");\r\n var regexS = \"[\\\\?&]\" + name + \"=([^&#]*)\";\r\n var regex = new RegExp(regexS, 'i');\r\n var results = null;\r\n if (!url) {\r\n results = regex.exec(window.location.href);\r\n } else {\r\n results = regex.exec(url);\r\n }\r\n if (!results) {\r\n return \"\";\r\n } else {\r\n return results[1];\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработка объекта Link - выжимка и сборка из него url\r\n * @method WebAccess.URL._getUrlFromLink\r\n * @private\r\n * @return {String} строка url\r\n * @since 5.0.0.7300\r\n */\r\n _getUrlFromLink: function (link) {\r\n var host = window.location.href.substr(0, window.location.href.lastIndexOf('/') + 1);\r\n var page = this._getPageNameByKind(objectTypeToString(link.type));\r\n var url = host + page + \"x?sys=\" + g_SysCode +\r\n \"&id=\" + link.id +\r\n (link.referenceName ? \"&compcode=\" + encodeURIComponent(link.referenceName) : '') +\r\n \"&ext=\" + g_ExtName;\r\n return url;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение имени страницы исходя из типа объекта.\r\n * @method WebAccess.URL._getPageNameByKind\r\n * @param {String} kind\r\n * @private\r\n * @return {String}\r\n * @since 5.0.0.7300\r\n */\r\n _getPageNameByKind: function (kind) {\r\n switch (kind.toUpperCase()) {\r\n case \"EDOC\": return \"doc.asp\";\r\n case \"FOL\": return \"folder.asp\";\r\n case \"JOB\": return \"job.asp\";\r\n case \"TASK\": return \"task.asp\";\r\n case \"REF\": return \"reference.asp\";\r\n default:\r\n return null;\r\n break;\r\n }\r\n return null;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает строкове представление адреса URL-ссылки.\r\n *\r\n * @method WebAccess.URL#asString\r\n * @since 5.0.0.7300\r\n * @return {String} Строка с адресом URL-ссылки.\r\n */\r\n asString: function () {\r\n return this._url;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n global.URL = URL;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Предоставляет вспомогательные инструменты.\r\n * \r\n * @namespace WebAccess.utils\r\n * @since 5.1.0.1523\r\n */\r\n global.utils = {};\r\n\r\n global.utils.compareData = function (v1, v2, dataType) {\r\n if (v1 === null) v1 = \"\";\r\n if (v2 === null) v2 = \"\";\r\n\r\n v1 = (\"\" + v1).toLowerCase();\r\n v2 = (\"\" + v2).toLowerCase();\r\n\r\n if (dataType.toLowerCase() == 'date') {\r\n //TODO Парсинг строк может быть медленным. Возможно стоит timestamp возвращать с сервера в отдельном поле.\r\n v1 = (v1 == '' ? new Date(100, 1, 1, 0, 0, 0) : parseDateTime('' + v1));\r\n v2 = (v2 == '' ? new Date(100, 1, 1, 0, 0, 0) : parseDateTime('' + v2));\r\n }\r\n\r\n if (dataType.toLowerCase() == 'float') {\r\n v1 = (v1 == '' ? Number.NEGATIVE_INFINITY : parseFloat(v1.replaceAll(',', '.')));\r\n v2 = (v2 == '' ? Number.NEGATIVE_INFINITY : parseFloat(v2.replaceAll(',', '.')));\r\n }\r\n\r\n if (dataType.toLowerCase() == 'integer') {\r\n v1 = +v1;\r\n v2 = +v2;\r\n }\r\n\r\n if (v1 < v2) return -1;\r\n if (v1 > v2) return 1;\r\n return 0;\r\n };\r\n\r\n /**\r\n * Получает значения ассоциативного массива.\r\n *\r\n * @method getAssociativeArrayValues\r\n * @memberOf WebAccess.utils\r\n * @param {array} array Массив, для которого нужно получить список значений.\r\n * @return {array} Список значений массива.\r\n * @since 5.6.0.1300\r\n */\r\n global.utils.getAssociativeArrayValues = function (array) {\r\n return Object.keys(array).map(function (key) {\r\n return array[key];\r\n });\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n})(window.WebAccess);","\"use strict\";\r\n/**\r\n * Предоставляет инструменты для работы с кэш-хранилищем.\r\n *\r\n * @namespace WebAccess.cache\r\n * @since 5.0.0.7100\r\n */\r\n(function (global) { \r\n\r\n var Cache = BaseObject.extend({\r\n _errorCatched: false,\r\n init: function (data) {\r\n var me = this;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n _data: {\r\n setItem: function (key, value) {\r\n this[key] = value;\r\n return this;\r\n },\r\n removeItem: function(key) {\r\n delete this[key];\r\n },\r\n getItem: function (key) {\r\n return this[key]; \r\n },\r\n clear: function () {\r\n for (p in this) {\r\n if (!$.isFunction(this[p])) {\r\n delete this[p];\r\n }\r\n }\r\n return this;\r\n }\r\n },\r\n className: \"Cache\",\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Проверить, поддерживается ли браузером локальное хранилище (localStorage).\r\n *\r\n * @function WebAccess.cache.isLocalStorageAvailable\r\n * @return {boolean} True – локальное хранилище поддерживается браузером, иначе False.\r\n * @since 5.0.0.7100 \r\n * @since 5.1.0.1505 RENAMED_FROM isLocalStorageAvailable \r\n */\r\n isStorageAvailable: function () {\r\n return !!(window[\"localStorage\"]) && !this._errorCatched;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @private \r\n * @method WebAccess.cache._getStorage\r\n */\r\n _getStorage: function () {\r\n if (this.isStorageAvailable) return window.localStorage;\r\n else {\r\n log.warn('CACHE', 'LocalStorage is not available for this browser, using local variable instead');\r\n return this._data;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Удалить значение.\r\n *\r\n * @function WebAccess.cache.removeItem\r\n * @param {string} key Ключ кэш-хранилища \r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.1.0.1534 \r\n */\r\n removeItem: WA.TCD(function (key) {\r\n var me = this;\r\n try {\r\n this._getStorage().removeItem(key); \r\n this.fire('itemRemoved', key);\r\n } catch (e) {\r\n log.error('CACHE', e);\r\n me._errorCatched = true;\r\n }\r\n return this;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Сохранить значение в кэш.\r\n *\r\n * @function WebAccess.cache.setItem\r\n * @param {string} key Ключ кэш-хранилища \r\n * @param {string} value Сохраняемое значение. Объекты не сохраняются\r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.0.0.7100\r\n */\r\n setItem: function (key, value) {\r\n var me = this;\r\n try {\r\n this._getStorage().setItem(key, value); \r\n this.fire('itemSet', key, value);\r\n } catch (e) {\r\n log.error('CACHE',e);\r\n me._errorCatched = true; \r\n }\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Получить значение из кэша.\r\n *\r\n * @function WebAccess.cache.getItem\r\n * @param {string} key Ключ кэш-хранилища \r\n * @return {String|Integer} Полученное значение типа String или Integer.\r\n * @since 5.0.0.7100\r\n */\r\n getItem: function (key) {\r\n return this._getStorage().getItem(key); \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Сохранить объект в кэш.\r\n *\r\n * @function WebAccess.cache.setObject\r\n * @param {string} key Ключ\r\n * @param {object} value Сохраняемый объект\r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.0.0.7100\r\n */\r\n setObject: WA.TCD(function(key, value) {\r\n this.setItem(key, $.toJSON(value));\r\n return this;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Получить объект из кэша.\r\n *\r\n * @function WebAccess.cache.getObject\r\n * @param {string} key Ключ\r\n * @return {object} Полученный объект.\r\n * @since 5.0.0.7100\r\n */\r\n getObject: function (key) {\r\n var value = this.getItem(key);\r\n return value && (value !=='undefined' ? $.parseJSON(value) : null);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Очистить кэш.\r\n *\r\n * @function WebAccess.cache.clear\r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.0.0.7100\r\n */\r\n clear: function () {\r\n this._getStorage().clear();\r\n return this;\r\n } \r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n \r\n global.cache = new Cache();\r\n global.cache.Cache = Cache;\r\n})(window.WebAccess);","'use strict';\r\n\r\n//Включает логирование всех событий. Используется для отладки.\r\n//window.ENABLE_EVENTS_LOGGING = true;\r\n//window.ENABLE_EVENTS_LOGGING_JQUERY = true;\r\n\r\n(function (global) {\r\n\r\n // Список уровней логирования и соответствующих ему типов логируемых сообщений.\r\n const includedLevels = Object.freeze({\r\n D: [ 'E', 'W', 'I', 'D' ],\r\n E: [ 'E' ],\r\n I: [ 'E', 'W', 'I' ],\r\n W: [ 'E', 'W' ],\r\n });\r\n\r\n // Ассоциативный массив соответствия строковых значений уровней ошибок их значениям в перечислении.\r\n const logLevels = Object.freeze({\r\n debug: LOG_LEVEL.DEBUG,\r\n error: LOG_LEVEL.ERROR,\r\n info: LOG_LEVEL.INFO,\r\n warn: LOG_LEVEL.WARN,\r\n warning: LOG_LEVEL.WARN,\r\n });\r\n\r\n /**\r\n * Предоставляет инструменты для логирования.\r\n * В режиме отладки веб-доступ записывает все действия в лог-файлы.\r\n * Данные файлов впоследствии можно использовать для отладки веб-модулей.\r\n *\r\n * @namespace WebAccess.utils.log\r\n * @since 5.1.0.1523\r\n *\r\n * @example\r\n * WA.utils.log.info('Загружен новый веб-модуль «Модуль 1.0»');\r\n * // Либо использовать второй вариант записи.\r\n * log.info('Загружен новый веб-модуль «Модуль 1.0»');\r\n */\r\n class Log extends BaseObject {\r\n\r\n constructor() {\r\n super();\r\n\r\n // Инициализация\r\n this.className = 'Log';\r\n this._disabled = true;\r\n this.saveImmediate = false;\r\n this.maxStackSize = 50;\r\n if (!this.isDisabled()) {\r\n this._disabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Привести строковое значение уровня ошибки к значению перечисления.\r\n *\r\n * @method _strToLevel\r\n * @param {string} level Уровнеь ошибки.\r\n * @private\r\n * @return {LOG_LEVEL} Значение уровня ошибки из перечисления.\r\n */\r\n strToLevel(level) {\r\n return logLevels[level] || null;\r\n }\r\n\r\n /**\r\n * Получить уровень логирования.\r\n *\r\n * @method getLevel\r\n * @return {string} Строка с уровнем логирования.\r\n */\r\n getLevel() {\r\n return WA.cache.getItem('log.level') || this.strToLevel(Core.logLevel) || LOG_LEVEL.ERROR;\r\n }\r\n\r\n /**\r\n * Установить уровень логирования.\r\n *\r\n * @method setLevel\r\n * @param {string} level Уровень логирования.\r\n * @return {WebAccess.utils.Log} Текущий объет логера.\r\n */\r\n setLevel(level) {\r\n WA.cache.setItem('log.level', level);\r\n return this;\r\n }\r\n\r\n /**\r\n * Проверить, отключено ли логирование.\r\n * Значение по умолчанию True.\r\n *\r\n * @method WebAccess.utils.log.isDisabled\r\n * @return {Boolean} True – логирование отключено, иначе False.\r\n */\r\n isDisabled() {\r\n return (!window.isDebug && WA.cache.getItem('log.isEnabled') !== 'true');\r\n }\r\n\r\n /**\r\n * Включить логирование.\r\n * По умолчанию логирование отключено.\r\n *\r\n * @method WebAccess.utils.log.enable\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n enable() {\r\n WA.cache.setItem('log.isEnabled', 'true');\r\n this._disabled = false;\r\n return this;\r\n }\r\n\r\n /**\r\n * Отправить логи на клиентские логи на сервер.\r\n *\r\n * @method _write\r\n * @param {object} params Параметры обращения к методу веб-сервиса.\r\n * @return {WebAccess.utils.Log} Текущий объект логера.\r\n * @private\r\n */\r\n _write(params) {\r\n if (!Core.isLogsEnabled || this._disabled || WA.getLocation() === 'login' || !params) {\r\n return this;\r\n }\r\n if (this.saveImmediate) {\r\n WA.SRV.request('/ClientLogs.asmx/Write', params);\r\n } else {\r\n const queue = WA.cache.getObject('logs') || [];\r\n queue.push(params);\r\n WA.cache.setObject('logs', queue);\r\n if (queue.length > this.maxStackSize) {\r\n this._writeQueue();\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Выгрузить текущий пакет лога на веб-сервер.\r\n * @method WebAccess.current.statistics._writeQueue\r\n * @private\r\n */\r\n _writeQueue() {\r\n if (this._disabled) {\r\n return this;\r\n }\r\n let queue = WA.cache.getObject('logs');\r\n const partToSend = queue.splice(0, this.maxStackSize);\r\n WA.cache.setObject('logs', queue);\r\n\r\n WA.SRV.request('/ClientLogs.asmx/writeQueue', {\r\n Queue: partToSend,\r\n }).done((success) => {\r\n if (!success) {\r\n queue = [\r\n ...partToSend,\r\n ...WA.cache.getObject('logs'),\r\n ];\r\n WA.cache.setObject('logs', queue);\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Отключить логирование.\r\n * По умолчанию логирование отключено.\r\n *\r\n * @method WebAccess.utils.log.enable\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n disable() {\r\n WA.cache.setItem('log.isEnabled', 'false');\r\n this._disabled = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Записать предупреждение в лог.\r\n * По умолчанию логирование отключено.\r\n *\r\n * @method WebAccess.utils.log.warn\r\n * @param {string} tag Тэг\r\n * @param {string} message Сообщение\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n warn(tag, message) {\r\n return this._log(LOG_LEVEL.WARN, tag, message);\r\n }\r\n\r\n /**\r\n * Записать предупреждение в лог.\r\n * По умолчанию логирование отключено.\r\n *\r\n * @method WebAccess.utils.log.warning\r\n * @param {string} tag Тэг\r\n * @param {string} message Сообщение\r\n * @alias WebAccess.utils.log.warn\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n warning(tag, message) {\r\n return this.warn(tag, message);\r\n }\r\n\r\n /**\r\n * Записать в лог информационное сообщение.\r\n *\r\n * @method WebAccess.utils.log.info\r\n * @param {string} tag Тэг\r\n * @param {string} message Сообщение\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n * @since 5.1.0.1523\r\n *\r\n * @example\r\n * // Для вывода информационного сообщения INFO Веб-модуль успешно загружен\r\n * WA.utils.log.info('INFO', 'Веб-модуль успешно загружен.');\r\n *\r\n * // Для вывода информационного сообщения DEFAULT Веб-модуль успешно загружен\r\n * WA.utils.log.info('Веб-модуль успешно загружен.');\r\n */\r\n info(tag, message) {\r\n return this._log(LOG_LEVEL.INFO, tag, message);\r\n }\r\n\r\n /**\r\n * Записать в лог сообщение об ошибке.\r\n *\r\n * @method WebAccess.utils.log.error\r\n * @param {string} tag Тэг\r\n * @param {string} message Сообщение\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n * @since 5.1.0.1523\r\n */\r\n error(tag, message) {\r\n return this._log(LOG_LEVEL.ERROR, tag, message);\r\n }\r\n\r\n /**\r\n * Отобразить в консоли последние сообщения, ожидающие отправки на веб-сервер.\r\n *\r\n * @method WebAccess.utils.log.showLastMessages\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n showLastMessages() {\r\n const queue = WA.cache.getObject('logs') || [];\r\n for (const line of queue) {\r\n const dt = new Date(line.Time);\r\n const fd = formatDateTime(dt).split(' ')[ 1 ] + ':' + dt.getSeconds() + '.' + dt.getMilliseconds();\r\n console.log(fd + ' ' + line.Level + ' ' + line.Tag + ' ' + line.Message);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Отобразить последнее сообщение.\r\n *\r\n * @method last\r\n */\r\n last() {\r\n this.showLastMessages();\r\n }\r\n\r\n /**\r\n * Сохранить лог в файл на веб-сервере.\r\n *\r\n * @method WebAccess.utils.log.save\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n */\r\n save() {\r\n this._writeQueue();\r\n return this;\r\n }\r\n\r\n /**\r\n * Записать в лог сообщение об отладке\r\n * @method WebAccess.utils.log.debug\r\n * @return {WebAccess.utils.log} Объект типа log.\r\n * @since 5.1.0.1523\r\n */\r\n debug(tag, message) {\r\n return this._log(LOG_LEVEL.DEBUG, tag, message);\r\n }\r\n\r\n /**\r\n * Непосредственная обрабтка вызовов записи в журнал\r\n * @method WebAccess.utils.log._log\r\n * @return {WebAccess.utils.log}\r\n * @private\r\n * @since 5.1.0.1523\r\n */\r\n _log(level, tag, message) {\r\n if (this._disabled) {\r\n return;\r\n }\r\n\r\n let messages;\r\n if (message) {\r\n messages = [ message ];\r\n tag = tag.toUpperCase();\r\n } else {\r\n messages = [ tag ];\r\n tag = 'DEFAULT';\r\n }\r\n\r\n if (includedLevels[ this.getLevel() ].indexOf(level) === -1) return this;\r\n\r\n const dt = new Date();\r\n const t = formatDateTime(dt).split(' ')[ 1 ] + ':' + dt.getSeconds() + '.' + dt.getMilliseconds();\r\n this.fire('onMessage', level, t, tag, messages);\r\n\r\n const params = { 'Time': new Date(), 'Tag': tag, 'Level': level, 'Message': messages.join(' ') };\r\n const logParams = [ t, tag ].concat(messages).join(' ');\r\n\r\n if (WA.ENV.browser.name !== 'IE') {\r\n switch (level) {\r\n case LOG_LEVEL.ERROR:\r\n console.error(logParams);\r\n break;\r\n case LOG_LEVEL.INFO:\r\n console.info(logParams);\r\n break;\r\n case LOG_LEVEL.WARN:\r\n console.warn(logParams);\r\n break;\r\n case LOG_LEVEL.DEBUG:\r\n default:\r\n console.log(logParams);\r\n }\r\n } else {\r\n console.log(logParams);\r\n }\r\n\r\n this._write(params);\r\n return this;\r\n }\r\n }\r\n\r\n global.log = new Log();\r\n window.onerror = (errorMsg, url, lineNumber) => {\r\n if (!WA.ENV.isTouch()) {\r\n log.error('DEFAULT', format('{0} {1}:{2}', errorMsg, url, lineNumber));\r\n } else {\r\n logDebug('ERROR: ' + format('{0} {1}:{2}', errorMsg, url, lineNumber));\r\n }\r\n return false;\r\n }\r\n\r\n})(window.WebAccess.utils);\r\n\r\n\r\n//Шамов А.: Для отладки событий.\r\nif (window.ENABLE_EVENTS_LOGGING && window.ENABLE_EVENTS_LOGGING_JQUERY) {\r\n var prevOn = jQuery.fn.on;\r\n jQuery.fn.on = function () {\r\n console.log('jQuery.on', arguments);\r\n return prevOn.apply(this, arguments);\r\n };\r\n\r\n var prevOff = jQuery.fn.off;\r\n jQuery.fn.off = function () {\r\n console.log('jQuery.off', arguments);\r\n return prevOff.apply(this, arguments);\r\n };\r\n\r\n var prevTrigger = jQuery.fn.trigger;\r\n jQuery.fn.trigger = function () {\r\n if (!WA.ENV.isTouch()) {\r\n console.log('jQuery.trigger', arguments);\r\n } else {\r\n logDebug('jQuery.trigger ' + arguments[ 0 ]);\r\n }\r\n return prevTrigger.apply(this, arguments);\r\n };\r\n\r\n var prevTriggerHandler = jQuery.fn.triggerHandler;\r\n jQuery.fn.triggerHandler = function () {\r\n if (!WA.ENV.isTouch()) {\r\n console.log('jQuery.triggerHandler', arguments);\r\n } else {\r\n logDebug('jQuery.triggerHandler ' + arguments[ 0 ]);\r\n }\r\n return prevTriggerHandler.apply(this, arguments);\r\n };\r\n}","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Предоставляет инструменты для работы с историей. \r\n */\r\n var History = BaseObject.extend({\r\n allowHistory: null,\r\n\r\n init: function () {\r\n var me = this;\r\n me.allowHistory = window.history && history.pushState;\r\n\r\n if (me.allowHistory) {\r\n // HACK: чтобы не ловить onpopstate при загрузке страницы в некоторых браузерах.\r\n window.addEventListener('load', function() {\r\n setTimeout(function() {\r\n window.addEventListener('popstate', function(event) {\r\n me.fire(me.EVENT.POP_STATE, event);\r\n me.fire(me.EVENT.CHANGE_STATE, event.state);\r\n });\r\n }, 0);\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Добавить состояние в историю.\r\n * \r\n * @param {object} state Объект состояния. \r\n * @param {string} title Заголовок страницы. \r\n * @param {string} url URL страницы.\r\n */\r\n pushState: function (state, title, url) {\r\n var me = this;\r\n if (me.allowHistory) {\r\n if (!state.type) {\r\n state.type = WA.getLocation();\r\n }\r\n\r\n history.pushState(state, title, url);\r\n me.fire(me.EVENT.PUSH_STATE, state, title, url);\r\n me.fire(me.EVENT.CHANGE_STATE, state);\r\n } else {\r\n window.open(url, '_self');\r\n }\r\n },\r\n\r\n /**\r\n * Заменить текущее состояние. \r\n * \r\n * @param {object} state Объект состояния. \r\n * @param {string} title Заголовок страницы. \r\n * @param {string} url URL страницы.\r\n */\r\n replaceState: function (state, title, url) {\r\n var me = this;\r\n if (me.allowHistory) {\r\n if (!state.type) {\r\n state.type = WA.getLocation();\r\n }\r\n\r\n history.replaceState(state, title, url);\r\n me.fire(me.EVENT.PUSH_STATE, state, title, url);\r\n me.fire(me.EVENT.CHANGE_STATE, state);\r\n }\r\n },\r\n \r\n /**\r\n * События. \r\n */\r\n EVENT: {\r\n /**\r\n * Добавлено состояние в историю. \r\n */\r\n PUSH_STATE: 'pushstate',\r\n /**\r\n * Извлечено состояние из истории. \r\n */\r\n POP_STATE: 'popstate',\r\n /**\r\n * Изменено текущиее состояние. \r\n */\r\n CHANGE_STATE: 'changestate'\r\n }\r\n });\r\n\r\n global.history = new History();\r\n})(WebAccess);","\"use strict\";\r\n/**\r\n * Предоставляет инструменты для работы со сессионным хранилищем (sessionStorage).\r\n *\r\n * @namespace WebAccess.cache.sessionCache\r\n * @since 5.1.0.1534\r\n */\r\n(function (global) { \r\n var SessionCache = global.cache.Cache.extend({\r\n init: function (data) {\r\n this._super(data);\r\n },\r\n\r\n /** \r\n * Проверить, поддерживается ли браузером сессионное хранилище (sessionStorage).\r\n *\r\n * @function WebAccess.cache.sessionCache.isStorageAvailable\r\n * @since 5.1.0.1505\r\n * @return {boolean} True – сессионное хранилище поддерживается браузером, иначе False.\r\n */\r\n isStorageAvailable: function () {\r\n return !!(window[\"sessionStorage\"]);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @private \r\n * @since 5.1.0.1505\r\n * @method WebAccess.cache.sessionCache._getStorage\r\n */\r\n _getStorage: function () {\r\n if (this.isStorageAvailable) return window.sessionStorage;\r\n else {\r\n console.warn('sessionCache is not available for this browser, using local variable instead');\r\n return this._data;\r\n }\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n });\r\n global.cache.sessionOnly = global.cache.sessionCache = new SessionCache();\r\n})(window.WebAccess);","\"use strict\";\r\n/**\r\n * Предоставляет инструменты для работы со сессионным хранилищем (sessionStorage).\r\n *\r\n * @namespace WebAccess.cache.sessionCache\r\n * @since 5.1.0.1534\r\n */\r\n(function (global) {\r\n var ServerCache = global.cache.Cache.extend({\r\n init: function (data) {\r\n this._super(data);\r\n },\r\n\r\n /** \r\n * Проверить, поддерживается ли браузером сессионное хранилище (sessionStorage).\r\n *\r\n * @function WebAccess.cache.sessionCache.isStorageAvailable\r\n * @since 5.1.0.1505\r\n * @return {boolean} True – сессионное хранилище поддерживается браузером, иначе False.\r\n */\r\n isStorageAvailable: function () {\r\n return !!(window[\"sessionStorage\"]);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Удалить значение.\r\n *\r\n * @function WebAccess.cache.removeItem\r\n * @param {string} key Ключ кэш-хранилища \r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.1.0.1534 \r\n */\r\n removeItem: WA.TCD(function (key) {\r\n var me = this;\r\n try {\r\n this._getStorage().removeItem(key);\r\n this.fire('itemRemoved', key);\r\n } catch (e) {\r\n log.error('CACHE', e);\r\n me._errorCatched = true;\r\n }\r\n return this;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Сохранить значение в кэш.\r\n *\r\n * @function WebAccess.cache.setItem\r\n * @param {string} key Ключ кэш-хранилища \r\n * @param {string} value Сохраняемое значение. Объекты не сохраняются\r\n * @return {WebAccess.cache} Объект типа cache.\r\n * @since 5.0.0.7100\r\n */\r\n setItem: function (key, value) {\r\n var me = this;\r\n value = $.toJSON(value);\r\n return WA.SRV.call('/Session.asmx/SetUserProfileSettings', { ParamName: key, ParamValue: value }).done(function () {\r\n me.fire('itemSet', key, value);\r\n }).fail(function(e) {\r\n log.error('CACHE', e);\r\n me._errorCatched = true;\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить значение из кэша.\r\n *\r\n * @function WebAccess.cache.getItem\r\n * @param {string} key Ключ кэш-хранилища\r\n * @return {Deferred} Результат запроса.\r\n * @since 5.0.0.7100\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n getItem: function (key) {\r\n var me = this;\r\n var result = $.Deferred();\r\n WA.SRV.call('/Session.asmx/GetUserProfileSettings', { ParamName: key }).done(function (value) {\r\n value = $.parseJSON(value);\r\n result.resolve(value);\r\n }).fail(function (e) {\r\n result.reject(e)\r\n log.error('CACHE', e);\r\n me._errorCatched = true;\r\n });\r\n return result;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n setObject: function(key,value) {\r\n return this.setItem(key, value);\r\n },\r\n\r\n getObject: function(key,value) {\r\n return this.getItem(key);\r\n },\r\n\r\n /**\r\n * @private \r\n * @since 5.1.0.1505\r\n * @method WebAccess.cache.sessionCache._getStorage\r\n */\r\n _getStorage: function () {\r\n if (this.isStorageAvailable) return window.sessionStorage;\r\n else {\r\n console.warn('sessionCache is not available for this browser, using local variable instead');\r\n return this._data;\r\n }\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n global.cache.serverCache = new ServerCache();\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Массив с timestamp запросов.\r\n *\r\n * @private\r\n * @property _activeRequests\r\n * @since 5.6.0.9000\r\n */\r\n global.services._activeRequests = {};\r\n\r\n /**\r\n * Вызвать метод веб-сервисов.\r\n * В методы done и error можно передать функции обратного вызова,\r\n * которые выполняются тогда, когда будет получен ответ от сервиса.\r\n * Если операции веб-сервиса прошли без сбоев, то будет вызвана функция,\r\n * переданная в метод done данного deferred-объекта, иначе будет вызвана функция, переданная в метод еrror.\r\n * Полный ответ сервиса можно получить, обратившись к контексту this внутри функции callback.\r\n * @function WebAccess.services.request\r\n * @param {string} method Вызываемый метод веб-сервиса.\r\n * @param {object} [params] Параметры веб-сервиса (объект данных).\r\n * @param {object} [options = {}] Опции запроса.\r\n * @param {boolean} [options.sync = false] Признак синхронного запроса к серверу.\r\n * @param {boolean} [options.hideError = false] Признак отображения сообщения об ошибке.\r\n * @param {boolean} [options.hideWarning = false] Признак отображения предупреждения.\r\n * @param {boolean} [options.hideSpinner = false] Признак отображения анимации процесса загрузки.\r\n * @return {object} Deferred-объект – специальный объект для управления отложенными вызовами.\r\n * @this {object} result - результат выполнения сервиса содержит полный ответ.\r\n * @since 5.6.0.9054\r\n *\r\n * @example\r\n * WA.SRV.request('/Reference.asmx/CreateNewFilter', {\r\n * ReferenceCode: WA.current.getReferenceCode(),\r\n * Name: displayValue\r\n * }).success(function (result) {\r\n * console.log(result); //то же самое что this.Result.\r\n * console.log(this.Result);\r\n * console.log(this.Warning);\r\n * console.log(this.Success);\r\n * console.log(this.Error);\r\n * }).error(function(error) {\r\n * console.log(error);\r\n * });\r\n *\r\n * @example\r\n * WA.SRV.request('/Script.asmx/Run', {\r\n * Name: 'WADemoTest',\r\n * Params: { id: 10 }\r\n * }, {\r\n * sync: true,\r\n * hideSpinner: true\r\n * }).error(function(errorText) {\r\n * ShowDialog(errorText);\r\n * });\r\n */\r\n global.services.request = function (method, params = {}, options = {}) {\r\n return global.services._call(method, params, options);\r\n };\r\n\r\n /**\r\n * Вызвать метод веб-сервисов.\r\n * В методы done и error можно передать функции обратного вызова,\r\n * которые выполняются тогда, когда будет получен ответ от сервиса.\r\n * Если операции веб-сервиса прошли без сбоев, то будет вызвана функция,\r\n * переданная в метод done данного deferred-объекта, иначе будет вызвана функция, переданная в метод еrror.\r\n * Полный ответ сервиса можно получить обратившись к контексту this внутри функции callback.\r\n * @tutorial services\r\n * @function WebAccess.services.call\r\n * @param {string} service_method Вызываемый метод веб-сервиса.\r\n * @param {object} [opt_params] Параметры веб-сервиса.\r\n * @param {string} [opt_spinnerText] Текст строки прогресса.\r\n * @param {string} [opt_onCompleteSpinnerText] Текст строки прогресса после выполнения операции.\r\n * @param {boolean} [opt_hideError] Не отображать ошибку.\r\n * @param {boolean} [opt_hideWarning] Не отображать уведомления.\r\n * @return {Deferred} deferred-объект – специальный объект для управления отложенными вызовами.\r\n * @this {object} result - результат выполнения сервиса содержит полный ответ.\r\n * @since 5.0.0.4000\r\n * @deprecated since 5.6.0.9054. Use WebAccess.services.request instead\r\n *\r\n * @example\r\n * WA.SRV.call(\"/Reference.asmx/CreateNewFilter\", { \"ReferenceCode\": WA.current.getReferenceCode(), \"Name\": displayValue }).success(function (result) {\r\n * console.log(result); //то же самое что this.Result.\r\n console.log(this.Result);\r\n console.log(this.Warning);\r\n console.log(this.Success);\r\n console.log(this.Error);\r\n * }).error(function(error) {\r\n console.log(error);\r\n });\r\n *\r\n * @example\r\n * WA.SRV.call(\"/Script.asmx/Run\",{Name:\"WADemoTest\",\"Params\": {\"id\": 10} }).error(function(errorText) { ShowDialog(errorText); } );\r\n */\r\n global.services.call = function (service_method, opt_params, opt_spinnerText, opt_onCompleteSpinnerText, opt_hideError, opt_hideWarning) {\r\n if (opt_spinnerText) console.log('Calling function WA.SRV.call() with deprecated parameter: opt_spinnerText');\r\n if (opt_onCompleteSpinnerText) console.log('Calling function WA.SRV.call() with deprecated parameter: opt_onCompleteSpinnerText');\r\n opt_params = opt_params || {};\r\n return global.services.request(service_method, opt_params, {\r\n sync: false,\r\n hideError: opt_hideError,\r\n hideWarning: opt_hideWarning,\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выполнить синхронный вызов методов веб-сервисов.\r\n * В методы done и error можно передать функции обратного вызова,\r\n * которые выполняются тогда, когда будет получен ответ от сервиса.\r\n * Если операции веб-сервиса прошли без сбоев, то будет вызвана функция,\r\n * переданная в метод done данного deferred-объекта, иначе будет вызвана функция, переданная в метод еrror.\r\n *\r\n * @tutorial services\r\n * @function WebAccess.services.callSync\r\n * @param {string} service_method Вызываемый метод веб-сервиса.\r\n * @param {object} [opt_params] Параметры веб-сервиса.\r\n * @param {string} [opt_spinnerText] Текст строки прогресса.\r\n * @param {string} [opt_onCompleteSpinnerText] Текст строки прогресса после выполнения операции.\r\n * @param {boolean} [opt_hideError] Не отображать ошибку.\r\n * @param {boolean} [opt_hideWarning] Не отображать уведомления.\r\n * @return {Deferred} deferred-объект – специальный объект для управления отложенными вызовами.\r\n * @since 5.0.0.4004\r\n * @deprecated since 5.6.0.9054. Use WebAccess.services.request instead\r\n */\r\n global.services.callSync = function (service_method, opt_params, opt_spinnerText, opt_onCompleteSpinnerText, opt_hideError, opt_hideWarning) {\r\n window.log.info('You are using deprecated method WA.SRV.callSync(), use WA.SRV.request() with param { sync: true }');\r\n if (opt_spinnerText) console.log('Calling function WA.SRV.callSync() with deprecated parameter: opt_spinnerText');\r\n if (opt_onCompleteSpinnerText) console.log('Calling function WA.SRV.callSync() with deprecated parameter: opt_onCompleteSpinnerText');\r\n opt_params = opt_params || {};\r\n return global.services.request(service_method, opt_params, {\r\n sync: true,\r\n hideError: opt_hideError,\r\n hideWarning: opt_hideWarning,\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вызов сервисов. Базовая функция.\r\n *\r\n * @method _call\r\n * @param {string} method Наименование метода.\r\n * @param {Object} params Параметры вызываемого метода.\r\n * @param {Object} options Опции.\r\n * @return {Deferred} Результат выполнения веб-метода.\r\n * @private\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.services._call = function (method, params, options) {\r\n let deferred = $.Deferred();\r\n let requestId = + new Date();\r\n\r\n if (!method) {\r\n WA.raise('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED', 'method');\r\n }\r\n\r\n deferred.success = deferred.done;\r\n deferred.error = deferred.fail;\r\n\r\n if (!options.hideSpinner && (!Object.keys(global.services._activeRequests).length || WA.CR.spinner && !WA.CR.spinner.isVisible)) {\r\n window.ShowSpinner();\r\n }\r\n global.services._activeRequests[requestId] = null;\r\n \r\n const xhr = $.ajax({\r\n type: 'POST',\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n url: method,\r\n data: $.toJSON(params),\r\n async: !options.sync,\r\n cache: false,\r\n success: (res) => {\r\n if (!res) {\r\n deferred.rejectWith({}, ['NO_ANSWER']);\r\n return;\r\n }\r\n\r\n res = res.d;\r\n\r\n if (!options.hideWarning && res.Warning !== null) {\r\n window.ShowInlineHint(res.Warning, MESSAGE_TYPE.WARNING, INLINE_HINT_PRIORITY.PRIMARY);\r\n }\r\n\r\n if (!res.Success) {\r\n if (!options.hideError && res.Error) {\r\n let messageType = MESSAGE_TYPE.ERROR; \r\n if (res.Severity && res.Severity !== '-1') {\r\n messageType = Number.parseInt(res.Severity);\r\n } \r\n window.ShowInlineHint(res.Error, messageType, INLINE_HINT_PRIORITY.PRIMARY); \r\n }\r\n deferred.rejectWith(res, [res.Error, res]);\r\n }\r\n\r\n if (window.CheckForLoginPage(res)) {\r\n return;\r\n }\r\n\r\n deferred.resolveWith(res, [res.Result, res]);\r\n },\r\n error: (err) => {\r\n let errorText = err.responseJSON ? err.responseJSON.Message : err.responseText;\r\n if (method.includes('/ClientStatistic.asmx/writeQueue')) {\r\n return;\r\n } else if (!global.services._isSessionAlive(err.status)) {\r\n errorText = L('WARN_BROKEN_SESSION');\r\n } else if (!options.hideError) {\r\n window.ShowInlineHint(errorText, MESSAGE_TYPE.ERROR, INLINE_HINT_PRIORITY.PRIMARY);\r\n }\r\n\r\n const errResp = Object.freeze({\r\n Result: null,\r\n Success: false,\r\n Warning: null,\r\n Error: errorText\r\n });\r\n deferred.rejectWith(errResp, [errorText, err]);\r\n },\r\n complete: () => {\r\n delete global.services._activeRequests[requestId];\r\n if (!Object.keys(global.services._activeRequests).length) {\r\n window.HideSpinner();\r\n }\r\n }\r\n });\r\n deferred.abort = xhr.abort;\r\n \r\n return deferred;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n global.services._sessionBrokenDialog = null;\r\n global.services._sessionRestoredDialog = null;\r\n\r\n /**\r\n * @fixme: рефактор плачет по этому\r\n * @private\r\n */\r\n global.services._isSessionAlive = function (statusCode) {\r\n\r\n if (statusCode == 401) {\r\n return false;\r\n }\r\n\r\n if (statusCode == 503) {\r\n WA.CR.inlineHint.show(L('ERROR_DESTRUCTIVE_FAULT'));\r\n log.error('SESSION', 'Service unavailavble');\r\n return false;\r\n }\r\n\r\n var dialog;\r\n if (statusCode == 475) {\r\n dialog = global.services._sessionRestoredDialog;\r\n if (!!dialog && dialog.isOpened()) {\r\n dialog.close();\r\n }\r\n\r\n if (!global.services._sessionBrokenDialog) {\r\n dialog = new WA.CMP.dialogs.MessageBox({ width: 450 });\r\n dialog.id = '475';\r\n dialog.isSingleInstance = true;\r\n dialog.removeDefaultButtons()\r\n .addButton('reloginLater', L('STAY_ON_PAGE'), function () {\r\n\r\n })\r\n .addButton('Relogin', L('LOGIN_AGAIN'), function () {\r\n ShowTopSpinner();\r\n WA.CR.window.openLogin();\r\n })\r\n .show(L('WARN_BROKEN_SESSION'), L('WARN_BROKEN_SESSION_DETAILS'), L('WARNING'), 'warning');\r\n } else {\r\n dialog = global.services._sessionBrokenDialog;\r\n dialog.show();\r\n }\r\n\r\n global.services._sessionBrokenDialog = dialog;\r\n return false;\r\n } else {\r\n dialog = global.services._sessionBrokenDialog;\r\n if (!!dialog && dialog.isOpened()) {\r\n dialog.close();\r\n if (!global.services._sessionRestoredDialog) {\r\n dialog = new WA.CMP.dialogs.MessageBox();\r\n dialog.isSingleInstance = true;\r\n dialog.removeDefaultButtons()\r\n .addButton('ReloginLater', L('OK'))\r\n .show(L('WARN_RESTORED_SESSION'), L('WARN_RESTORED_SESSION_DETAILS'), L('INFO'), 'info');\r\n\r\n }\r\n } else { dialog = global.services._sessionRestoredDialog }\r\n global.services._sessionRestoredDialog = dialog;\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Предоставляет инструменты для работы со справочниками, карточками справочников,\r\n * а также предоставляет ресурсы для выполнения различных настроек в справочниках, например, работа с фильтрами.\r\n *\r\n * @namespace WebAccess.services.reference\r\n * @since 5.0.0.4004\r\n */\r\n global.services.reference = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы со сценариями. Например, позволяет запустить сценарий.\r\n *\r\n * @namespace WebAccess.services.script\r\n * @since 5.0.0.4004\r\n */\r\n global.services.script = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с объектами системы DIRECTUM.\r\n * Например, позволяет установить пользовательский статус на объекте.\r\n *\r\n * @namespace WebAccess.services.entity\r\n * @since 5.0.0.4200\r\n */\r\n global.services.entity = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с задачами.\r\n * Например, позволяет создать задачу с вложениями и установить права на вложения задачи.\r\n *\r\n * @namespace WebAccess.services.task\r\n * @since 5.0.0.4200\r\n */\r\n global.services.task = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для проведения аутентификации пользователя и его работы с реквизитами.\r\n * Например, позволяет сменить пароль пользователя.\r\n *\r\n * @namespace WebAccess.services.authenticaion\r\n * @since 5.2.0.1200\r\n */\r\n global.services.authenticaion = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с папками системы DIRECTUM.\r\n * Например, позволяет установить пользовательские статусы на папках.\r\n *\r\n * @namespace WebAccess.services.folder\r\n * @since 5.0.0.4200\r\n */\r\n global.services.folder = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с сессией пользователя.\r\n * Например, позволяет изменить тему профиля пользователя.\r\n *\r\n * @namespace WebAccess.services.session\r\n * @since 5.0.0.4214\r\n */\r\n global.services.session = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с документами.\r\n *\r\n * @namespace WebAccess.services.document\r\n * @since 5.0.0.4218\r\n */\r\n global.services.document = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с карточками.\r\n *\r\n * @namespace WebAccess.services.cardform\r\n * @since 5.0.0.7100\r\n */\r\n global.services.cardform = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для получения разметки реквизитов на сервере.\r\n *\r\n * @namespace WebAccess.services.requisite\r\n * @since 5.0.0.7100\r\n */\r\n global.services.requisite = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Предоставляет инструменты для работы с профилем пользователя.\r\n *\r\n * @namespace WebAccess.services.requisite\r\n * @since 5.6.0.1000\r\n */\r\n global.services.userProfile = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Получает объект-словарь, необходимый для наполнения данными шаблона.\r\n * Позволяет использовать глобальную функцию L в шаблонах для перевода строк.\r\n *\r\n * @function WebAccess.templates.prepare\r\n * @return {object} Объект-словарь для наполнения данными шаблона.\r\n * @see WebAccess.templates.render\r\n * @since 5.0.0.4321\r\n */\r\n global.templates.prepare = function (opt_control_id) {\r\n var hasID = false;\r\n if (opt_control_id) hasID = true;\r\n\r\n var data = {\r\n \"ID\": $.isPlainObject(opt_control_id) ? (new Date).getTime() : opt_control_id,\r\n \"hasID\": hasID,\r\n \"L\": function () {\r\n return function (a) {\r\n return L($.trim(a));\r\n }\r\n }\r\n };\r\n\r\n if ($.isPlainObject(opt_control_id)) $.extend(data, opt_control_id);\r\n\r\n return data;\r\n };\r\n\r\n\r\n /**\r\n * Устанавливает данные для указанного шаблона.\r\n * Накладывает данные на указанный шаблон, генерирует html-разметку.\r\n *\r\n * @function WebAccess.templates.render\r\n * @param {string} templateName Путь к файлу шаблона относительно папки Site/templates\r\n * @param {Object} opt_data Данные для шаблона\r\n * @param {boolean} opt_disableCache Отключить кеширование. Возможные значения: true, false. Значение по умолчанию false\r\n * @param {Object} opt_sync Загружать данные синхронно\r\n * @param {Object} opt_partials Подшаблоны\r\n * @return {Deferred} Текущий объект.\r\n * @since 5.0.0.4213\r\n * @todo создать метод для синхронного запроса\r\n * @todo покрыть тестами\r\n *\r\n * @example\r\n *\r\n * //Добавляем данные в словарь.\r\n * var data = WA.TMPL.prepare();\r\n * data.left = 'Левая колонка';\r\n * data.right = 'Правая колонка';\r\n * data.center = 'Центральная колонка с html';\r\n *\r\n * //Добавляем данные в шаблон.\r\n * // layouts/3Columns.html - шаблон с тремя колонками на блоках без таблиц.\r\n * WA.TMPL.render(\"layouts/3Columns.html\", data, false, false, {left: \"panels/left.html\" }).done(function(html) {\r\n * ShowDialog(html);\r\n * });\r\n * //В результате появится окно с тремя колонками: «Левая колонка», «Правая колонка», «Центральная колонка с html».\r\n */\r\n global.templates.render = function (templateName, opt_data, opt_disableCache, opt_sync, opt_partials) {\r\n\r\n opt_data = opt_data || global.templates.prepare();\r\n opt_sync = opt_sync || false;\r\n var jDeferred = getCustomDeferred();\r\n\r\n if (arguments.length < 1) global.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n\r\n loadPartials(opt_partials).done(function(partials) {\r\n findTemplate(templateName, opt_sync, opt_disableCache).done(function (template) {\r\n var html = template[0].render(opt_data, partials);\r\n jDeferred.resolveWith(this, [html]);\r\n }).fail(function (err) {\r\n jDeferred.rejectWith(this, [err]);\r\n });\r\n\r\n }).fail(function (err) {\r\n jDeferred.rejectWith(this, [err]);\r\n });\r\n\r\n return jDeferred;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пока опасаюсь делать публичным. Не описывать в документации\r\n * @since 5.2.0.1300\r\n * @ignore\r\n * @private\r\n */\r\n global.templates.load = function (templateName, opt_disableCache, opt_sync) {\r\n opt_sync = opt_sync || false;\r\n var jDeferred = getCustomDeferred();\r\n if (arguments.length < 1) global.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n\r\n findTemplate(templateName, opt_sync, opt_disableCache).done(function(_template) {\r\n jDeferred.resolveWith(this, [_template[0]]);\r\n }).fail(function (err) {\r\n jDeferred.rejectWith(this, [err]);\r\n });\r\n\r\n return jDeferred;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить спец-Deferred, похожий на Ajax от jQuery\r\n * @inner\r\n * @ignore\r\n * @function getCustomDeferred\r\n */\r\n var getCustomDeferred = function () {\r\n var jDeferred = jQuery.Deferred();\r\n jDeferred.success = jDeferred.done;\r\n jDeferred.error = jDeferred.fail;\r\n return jDeferred;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Загрузка подшаблонов.\r\n *\r\n * @function loadPartials\r\n * @inner\r\n * @param {Object} opt_partials Подшаблоны.\r\n * @return {Deferred} Подшаблон.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n var loadPartials = function (opt_partials) {\r\n var jDeferred = jQuery.Deferred();\r\n var invertedNames = _.invert(opt_partials);\r\n var queries = [];\r\n if (opt_partials && !$.isEmptyObject(opt_partials)) {\r\n\r\n for (var partialKey in opt_partials) {\r\n var partialName = opt_partials[partialKey];\r\n queries.push(findTemplate(partialName));\r\n }\r\n\r\n $.when.apply($, queries).done(function () {\r\n var partials = {};\r\n var args = $.makeArray(arguments);\r\n\r\n for (var i =0; i} Найденный шаблон.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n var findTemplate = function (templateName, opt_sync, opt_disableCache) {\r\n var jDeferred = $.Deferred();\r\n findCompiledTemplate(templateName).done(function (template) {\r\n jDeferred.resolve([template, templateName]);\r\n }).fail(function () {\r\n findCachedTemplate(templateName, opt_disableCache).done(function (template) {\r\n jDeferred.resolve([template, templateName]);\r\n }).fail(function () {\r\n findRemoteTemplate(templateName, opt_sync, opt_disableCache).done(function (template) {\r\n jDeferred.resolve([template, templateName]);\r\n }).fail(function (err) {\r\n jDeferred.reject([err, templateName]);\r\n });\r\n });\r\n });\r\n return jDeferred;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Поиск шаблона среди скомпилированных\r\n *\r\n * @function findCompiledTemplate\r\n * @inner\r\n * @param {string} templateName Имя шаблона.\r\n * @return {Deferred} Найденный шаблон.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n var findCompiledTemplate = function (templateName) {\r\n var result = $.Deferred();\r\n if (!!window.templates && templateName.indexOf('.compile.html') !== -1) {\r\n var template = window.templates;\r\n var path = templateName.replace(/\\//g, '_').replace('.compile.html', '');\r\n if (path[0] === '_') path = path.substring(1);\r\n template = template[path];\r\n\r\n if (!!template && template.hasOwnProperty('r')) {\r\n result.resolve(template);\r\n return result;\r\n }\r\n }\r\n result.reject();\r\n return result;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Поиск шаблона среди закешированных\r\n *\r\n * @function findCachedTemplate\r\n * @inner\r\n * @param {string} templateName Имя шаблона.\r\n * @param {boolean} opt_disableCache Признак игнорирования кэша.\r\n * @return {Deferred} Найденный шаблон.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n *\r\n */\r\n var findCachedTemplate = function (templateName, opt_disableCache) {\r\n var result = $.Deferred();\r\n var cached = WA.cache.getItem(templateName);\r\n if (!!cached && !opt_disableCache) {\r\n var template = Hogan.compile(cached);\r\n result.resolve(template);\r\n return result;\r\n }\r\n ;\r\n\r\n result.reject();\r\n return result;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Поиск шаблона на сервере\r\n *\r\n * @function findRemoteTemplate\r\n * @inner\r\n * @param {string} templateName Имя шаблона.\r\n * @param {boolean} opt_sync Признак синхронного запроса.\r\n * @param {boolean} opt_disableCache Признак игнорирования кэша.\r\n * @return {Deferred} Найденный шаблон.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n var findRemoteTemplate = function (templateName, opt_sync, opt_disableCache) {\r\n var result = $.Deferred();\r\n $.ajax({ url: \"templates/\" + templateName, 'async': !opt_sync, 'cache': opt_disableCache }).done(function (templateText) {\r\n global.cache.setItem(templateName, templateText);\r\n var template = Hogan.compile(templateText);\r\n result.resolve(template);\r\n }).error(function (error) {\r\n result.reject(error);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Смена пароля пользователя.\r\n *\r\n * @function WebAccess.services.authenticaion.changePassword\r\n */\r\n global.authenticaion.changePassword = function (userName, oldPassword, newPassword, confirmPassword, isFirstLogin, success, failed) {\r\n CallService(\"/Authentication.asmx/ChangePassword\", {\r\n Login: userName,\r\n PasswordOld: oldPassword,\r\n PasswordNew: newPassword,\r\n PasswordConfirm: confirmPassword,\r\n IsFirstLogin: isFirstLogin\r\n }, function (res) {\r\n if (res.Success) {\r\n if (success)\r\n success(res);\r\n } else {\r\n if (failed)\r\n failed(res);\r\n }\r\n });\r\n return false;\r\n };\r\n\r\n /**\r\n * Вход пользователя.\r\n *\r\n * @function WebAccess.services.authenticaion.loginUser\r\n */\r\n global.authenticaion.loginUser = function (providerName, userName, userRealm, userPassword, rememberMe, success, failed) {\r\n var request = {\r\n UserName: userName,\r\n Password: userPassword,\r\n Realm: userRealm,\r\n ProviderName: providerName,\r\n RememberMe: rememberMe\r\n };\r\n \r\n CallService(\"/Authentication.asmx/Login\", request, function (res) {\r\n if (res.Success) {\r\n if (success)\r\n success(res);\r\n } else {\r\n if (failed)\r\n failed(res);\r\n }\r\n });\r\n return false;\r\n };\r\n\r\n})(window.WebAccess.services);","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Устанавливает часовой пояс пользователя.\r\n *\r\n * @tutorial services\r\n * @function WebAccess.services.userProfile.setTimeZone\r\n * @param {string} timeZoneId ИД часового пояса.\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n *\r\n * @example\r\n * // Установить часовой пояс для Екатеринбурга.\r\n * WA.SRV.userProfile.setTimeZone(\"Yekaterinburg Time\");\r\n */\r\n global.userProfile.setTimeZone = function (timeZoneId) {\r\n return global.call('api/UserProfile.asmx/SetTimeZone', { 'timeZoneId': timeZoneId });\r\n };\r\n\r\n})(window.WebAccess.services);","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Создать новую строку детального раздела.\r\n *\r\n * @function WebAccess.services.cardform.createTableRow\r\n * @param {Link} obj Ссылка на объект\r\n * @param {string} view Представление, в котором открыта карточка\r\n * @param {integer} detailNum Номер детального раздела\r\n * @param {string} tableName Имя таблицы детального раздела\r\n * @param {integer} number Номер строки таблицы\r\n\r\n * @return {Deferred} Специальный deferred-объект.\r\n */\r\n global.cardform.createTableRow = function (obj, requisites, view, detailNum, tableName, number, opt_sync) {\r\n var callFunc = (opt_sync === true) ? global.callSync : global.call;\r\n return callFunc(\"/CardForm.asmx/CreateTableRow\", {\r\n Obj: obj,\r\n Requisites: requisites || {},\r\n View: view,\r\n DetailNum: detailNum,\r\n Number: number\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Копирует строку детального раздела.\r\n *\r\n * @function WebAccess.services.cardform.copyTableRow\r\n * @param {Link} obj Ссылка на объект\r\n * @param {string} view Представление, в котором открыта карточка\r\n * @param {integer} detailNum Номер детального раздела\r\n * @param {integer} sourceRowID ИД копириуемой строки\r\n * @param {string} tableName Имя таблицы детального раздела\r\n * @param {integer} number Номер строки таблицы\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.2.0.1300\r\n */\r\n global.cardform.copyTableRow = function (obj, requisites, view, detailNum, sourceRowID, tableName, number, opt_sync) {\r\n var callFunc = (opt_sync === true) ? global.callSync : global.call;\r\n return callFunc(\"/CardForm.asmx/CopyTableRow\", {\r\n Obj: obj,\r\n View: view,\r\n DetailNum: detailNum,\r\n SourceRowID: sourceRowID,\r\n Number: number,\r\n Requisites: requisites || {}\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n\r\n /**\r\n * Удалить строку детального раздела по ИД.\r\n *\r\n * @function WebAccess.services.cardform.deleteTableRow\r\n * @param {Link} obj Ссылка на объект\r\n * @param {string} view Представление, в котором открыта карточка\r\n * @param {integer} detailNum Номер детального раздела\r\n * @param {integer} rowID ИД строки таблицы\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.2.0.1300\r\n */\r\n global.cardform.deleteTableRow = function (obj, view, detailNum, rowID, opt_sync) {\r\n var callFunc = (opt_sync === true) ? global.callSync : global.call;\r\n return callFunc(\"/CardForm.asmx/DeleteTableRow\", {\r\n Obj: obj,\r\n View: view,\r\n DetailNum: detailNum,\r\n RowID: rowID\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохранить карточку объекта.\r\n *\r\n * @function WebAccess.services.cardform.save\r\n * @param {Link} obj Ссылка на объект\r\n * @param {string} view Представление, в котором открыта карточка\r\n * @param {Object} reqs Значения реквизитов\r\n * @param {Object} cmd Дополнительные команды при сохранении. Например, удаление строки детального раздела\r\n * @param {boolean} needSaveObject Признак необходимости сохранения карточки\r\n * @param {integer} folderIdToPaste ИД папки, в которую вставлена ссылка\r\n * @param {string} Mode Режим открытия.\r\n *\r\n * @return {Deferred} Специальный deferred-объект.\r\n */\r\n global.cardform.save = function (obj, view, reqs, cmd, needSaveObject, folderIdToPaste) {\r\n return global.call(\"/CardForm.asmx/Save\", {\r\n Obj: obj,\r\n View: view,\r\n Req: reqs,\r\n Cmd: cmd,\r\n NeedSaveObject: needSaveObject,\r\n FolderIDToPaste: folderIdToPaste,\r\n Mode: (new WA.URL()).getParam('mode').toUpperCase(),\r\n }, false, false, true, true);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохранение карточки объекта и вставка этого объект в папку или ЗЗУ.\r\n * @param {Link} obj Ссылка на объект.\r\n * @param {string} view Представление, в котором открыта карточка.\r\n * @param {Object} reqs Значения реквизитов.\r\n * @param {Object} cmd Дополнительные команды при сохранении (например, удаление строки детального раздела(.\r\n * @param {boolean} needSaveObject Признак нужно ли сохранять карточку.\r\n * @param {Link} receiverObjectLink Ссылка куда надо вставить объект после сохранения.\r\n * @param {string} Mode Режим открытия.\r\n * @function WebAccess.services.cardform.saveAndAttach\r\n * @return {Deferred} jQuery Deferred объект\r\n */\r\n global.cardform.saveAndAttach = function (obj, view, reqs, cmd, needSaveObject, receiverObjectLink) {\r\n return global.call(\"/CardForm.asmx/SaveAndAttach\", {\r\n Obj: obj,\r\n View: view,\r\n Req: reqs,\r\n Cmd: cmd,\r\n NeedSaveObject: needSaveObject,\r\n ReceiverObjectLink: (!!receiverObjectLink && receiverObjectLink.id ? receiverObjectLink.toLinkModel() : null),\r\n Mode: (new WA.URL()).getParam('mode').toUpperCase(),\r\n }, false, false, true, true);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.WebAccess.services);\r\n","(function (global) {\r\n global.cryptography = {}\r\n\r\n /**\r\n * Возвращает подписываемые атрибуты для произвольных данных.\r\n *\r\n * @function WebAccess.services.cryptography.getSignableAttributes\r\n * @param {string} content Подписываемые данные.\r\n * @param {string} certificateIdBase64 Имя сертификата в кодировке base64.\r\n * @param {string} pluginNameBase64 Имя плагина в кодировке base64.\r\n * @return {Deferred} Подписываемые атрибуты для произвольных данных.\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.cryptography.getSignableAttributes = function (content, certificateIdBase64, pluginNameBase64) {\r\n var d = $.Deferred();\r\n\r\n var service = \"/api/Cryptography.asmx/GetSignableAttributes\";\r\n var args = {\r\n \"certificateIdBase64\": certificateIdBase64,\r\n \"pluginNameBase64\": pluginNameBase64,\r\n \"content\": content\r\n }\r\n WA.SRV.call(service, args).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Формирует электронную подпись.\r\n *\r\n * @function WebAccess.services.cryptography.buildSignature\r\n * @param {string} signingAttributes Подписываемые атрибуты.\r\n * @param {string} signedAttributes Подписанные атрибуты.\r\n * @param {string} certificateIdBase64 Имя сертификата в кодировке base64.\r\n * @param {string} pluginNameBase64 Имя плагина в кодировке base64.\r\n * @return {Deferred} Электронная подпись.\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.cryptography.buildSignature = function (signingAttributes, signedAttributes, certificateIdBase64, pluginNameBase64) {\r\n var d = $.Deferred();\r\n\r\n var service = \"/api/Cryptography.asmx/BuildSignature\";\r\n var args = {\r\n \"certificateIdBase64\": certificateIdBase64,\r\n \"pluginNameBase64\": pluginNameBase64,\r\n \"signingAttributes\": signingAttributes,\r\n \"signedAttributes\": signedAttributes\r\n }\r\n WA.SRV.call(service, args).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Проверяет достоверность электронной подписи.\r\n *\r\n * @method WebAccess.services.cryptography.verifySignature\r\n * @param {string} content Подписываемый контент.\r\n * @param {string} signature Электронная подпись.\r\n * @param {string} pluginNameBase64 Имя плагина Агента веб-доступа для подписания.\r\n * @return {Deferred} True - подпись достоверна, иначе False.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.cryptography.verifySignature = function (content, signature, pluginNameBase64) {\r\n var d = $.Deferred();\r\n\r\n var service = \"/api/Cryptography.asmx/VerifySignature\";\r\n var args = {\r\n \"pluginNameBase64\": pluginNameBase64,\r\n \"content\": content,\r\n \"signatureBase64\": signature\r\n }\r\n\r\n WA.SRV.call(service, args).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Подписывает произвольный строковый контент.\r\n *\r\n * @method WebAccess.services.cryptography.signContent\r\n * @param {string} content Подписываемый контент\r\n * @param {string} certificateIdBase64 ИД сертификата, которым будет подписан контент\r\n * @param {string} pluginNameBase64 Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания документа от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} additionalInfo Дополнительная информация\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается контент\r\n * @return {Deferred} Base64 строка подписи.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.cryptography.signContent = function (content, certificateIdBase64, pluginNameBase64, comment, isApprovingSign,\r\n isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode) {\r\n var d = $.Deferred();\r\n\r\n WA.services.cryptography.getSignableAttributes(content, certificateIdBase64, pluginNameBase64).done(function (signableAttributes) {\r\n WA.agent.edms.signAttributes(signableAttributes, certificateIdBase64, pluginNameBase64, pluginVersion, comment, isApprovingSign, isForSubstitute, substituteUserCode, additionalInfo, tokenPinCode, onSignedCallback).done(function (response) {\r\n var signedAttributes = response.result;\r\n WA.services.cryptography.buildSignature(signableAttributes, signedAttributes, certificateIdBase64, pluginNameBase64).done(function (signatureBase64) {\r\n WA.services.cryptography.verifySignature(content, signatureBase64, pluginNameBase64).done(function (success) {\r\n if (success === true) {\r\n d.resolve(signatureBase64);\r\n } else {\r\n d.reject(L(\"SIGNATURE_IS_INVALID\"));\r\n }\r\n }).fail(function (res) {\r\n d.reject(res);\r\n })\r\n }).fail(function (res) {\r\n d.reject(res);\r\n })\r\n }).fail(function (res) {\r\n d.reject(res.message);\r\n })\r\n }).fail(function (res) {\r\n d.reject(res);\r\n })\r\n\r\n return d.promise();\r\n };\r\n\r\n})(window.WebAccess.services);\r\n\r\n\r\n","\"use strict\";\r\n\r\n/**\r\n * Cостояние версии документа.\r\n *\r\n * @enum {integer} VERSION_STATE\r\n * @readonly\r\n * @since 5.0.0.4218\r\n * @global\r\n * @example\r\n *\r\n * //Установить для первой версии документа с ИД=123123 состояние «В разработке».\r\n * WA.SRV.document.version.setState(123123,1,VERSION_STATE.IN_DESING);\r\n */\r\nvar VERSION_STATE = {\r\n /*Cостояние по умолчанию, указанное в карточке вида документа на закладке «Жизненный цикл».*/\r\n DEFAULT: 0,\r\n /** В разработке */\r\n IN_DESING: 1,\r\n /** Действующая */\r\n ACTIVE: 2,\r\n /** Устаревшая */\r\n OBSOLETE: 3\r\n};\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Предоставляет инструменты для работы с версиями документа.\r\n *\r\n * @namespace WebAccess.services.document.version\r\n * @since 5.0.0.4218\r\n */\r\n global.document.version = {};\r\n\r\n /**\r\n * Получает имя документа по ИД.\r\n *\r\n * @function getNameById\r\n * @param {Array} ids ИД документа.\r\n * @returns {Deferred} Наименование документа.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.document.getNameById = function (ids) {\r\n var d = $.Deferred();\r\n\r\n WA.SRV.call('/api/LinkQuery.asmx/GetDocumentsById', {\r\n ids: ids\r\n }, null, null, true, true).done(function (data) {\r\n var docs = $.parseJSON(data);\r\n if (docs && docs.length > 0) {\r\n d.resolve(docs[0].name);\r\n } else {\r\n d.reject(L('ERR_OBJECT_NOT_FOUND'));\r\n }\r\n }).fail(function (err) {\r\n d.reject(err);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n\r\n /**\r\n * Изменить примечание версии.\r\n *\r\n * @function WebAccess.services.document.version.setNote\r\n * @param {integer} docId ИД документа\r\n * @param {integer} verNumber Номер версии документа\r\n * @param {string} note Текст примечания\r\n * @return {deferred} Специальный deferred-объект.\r\n * @since 5.0.0.4218\r\n * @example\r\n *\r\n * //Установить для первой версии документа с ИД=123123 примечание «Для рассылки».\r\n * WA.SRV.document.version.setNote(123123,1,\"Для рассылки\");\r\n */\r\n global.document.version.setNote = function (docId, verNumber, note) {\r\n return global.call(\"/Document.asmx/ChangeVersionNote\", {\r\n 'DocumentID': docId,\r\n 'VersionNumber': verNumber,\r\n 'Note': note\r\n }, false, false);\r\n };\r\n\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Изменить состояние версии.\r\n *\r\n * @function WebAccess.services.document.version.setState\r\n * @param {integer} docId ИД документа\r\n * @param {integer} verNumber Номер версии документа\r\n * @param {string} state Состояние документа. Глобальная функция VERSION_STATE\r\n * @return {deferred} Специальный deferred-объект.\r\n * @since 5.0.0.4218\r\n * @example\r\n *\r\n * //Установить для первой версии документа с ИД=123123 состояние «В разработке».\r\n * WA.SRV.document.version.setState(123123,1,VERSION_STATE.IN_DESING);\r\n */\r\n global.document.version.setState = function (docId, verNumber, state) {\r\n return global.call(\"/Document.asmx/ChangeVersionState\", {\r\n 'DocumentID': docId,\r\n 'VersionNumber': verNumber,\r\n 'State': state\r\n }, false, false);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подписывает документ.\r\n *\r\n * @function WebAccess.services.document.sign\r\n * @param {number} documentId ИД документа для подписания\r\n * @param {string} cardTypeCode Код типа карточки документа\r\n * @param {number} versionNumber Номер версии документа для подписания\r\n * @param {number} certificateId ИД сертификата, которым будет подписан документ\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания документа от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} additionalInfo Дополнительная информация о подписи документа\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается документ\r\n * @return {Deferred} Результат подписания.\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.document.sign = function (documentId, cardTypeCode, versionNumber, certificateId, pluginName, comment, isApprovingSign,\r\n isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode) {\r\n\r\n var d = $.Deferred();\r\n\r\n global.document.onBeforeSign(documentId, cardTypeCode, versionNumber, certificateId, pluginName, comment, isApprovingSign,\r\n isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode).done(function (success, signContext) {\r\n if (success === true) {\r\n WebAccess.agent.edms.signDocument(documentId, versionNumber, certificateId, pluginName, comment, isApprovingSign,\r\n isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode).always(function (signDocResponse) {\r\n global.document.onAfterSign(signDocResponse, signContext).done(function (result) {\r\n d.resolve(result);\r\n }).fail(function (result) {\r\n d.reject(result);\r\n });\r\n });\r\n } else {\r\n d.resolve(false);\r\n }\r\n }).fail(function (result) {\r\n d.reject(result);\r\n });\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Вызывается до подписания документа.\r\n *\r\n * @function WebAccess.services.document.onBeforeSign\r\n * @param {number} documentId ИД документа для подписания\r\n * @param {string} cardTypeCode Код типа карточки документа\r\n * @param {number} versionNumber Номер версии документа для подписания\r\n * @param {number} certificateId ИД сертификата, которым будет подписан документ\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания документа от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} additionalInfo Дополнительная информация о подписи документа\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается документ\r\n * @return {Deferred} Успешность выполнения.\r\n * @since 5.6.0.1000\r\n */\r\n global.document.onBeforeSign = function (documentId, cardTypeCode, versionNumber, certificateId, pluginName, comment, isApprovingSign,\r\n isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode) {\r\n\r\n var signContext = {};\r\n var d = $.Deferred();\r\n d.resolve(true, signContext);\r\n\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Вызывается после подписания документа.\r\n *\r\n * @function WebAccess.services.document.onAfterSign\r\n * @param {object} signDocResponse Результат подписания документа\r\n * @param {object} signContext Данные, заполненные в функции до подписания\r\n * @return {Deferred}\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.document.onAfterSign = function (signDocResponse, signContext) {\r\n var d = $.Deferred();\r\n d.resolve();\r\n\r\n return d.promise();\r\n };\r\n\r\n})(window.WebAccess.services);\r\n","(function (global) {\r\n global.foldercontent = {}\r\n\r\n /**\r\n * Выполняет прикладное действие над контентом папки.\r\n *\r\n * @function WebAccess.services.foldercontent.executeAction\r\n * @param {string} actionName Имя действия.\r\n * @param {Object} contents Параметры контента.\r\n * @param {string} contents.folderId ИД папки, над контентом которой совершается действие.\r\n * @param {Array} [contents.selectedItems =[]] Список выделенных в папке элементов.\r\n * @param {Array} [contents.unselectedItems = []] Список невыделенных в папке элементов.\r\n * @param {boolean} contents.isAllItemsSelected Признак выделения всех объектов.\r\n * @param {string} [contents.filter=''] Значение like-фильтра в папке.\r\n * @param {Array} [contents.filterRequisites = ''] Реквизиты, по которым происходит фильтрация.\r\n * @param {Object} [reinvokeCommand = {}] Параметры команд пост-обратотки действия.\r\n * @param {number} [reinvokeCommand.commandNumber = 0] Номер команды пост-обработки действия.\r\n * @param {number} [reinvokeCommand.commandType = 0] Тип команды пост-обработки действия.\r\n * @param {Object} [reinvokeCommand.commandResult = 0] Результат выполнения команд пост-обработки действия.\r\n * @return {Deferred} Результат выполнения прикладного действия.\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.foldercontent.executeAction = (actionName, contents, reinvokeCommand = {}) => {\r\n let d = $.Deferred();\r\n\r\n const service = '/api/FolderContent.asmx/ExecuteAction';\r\n let defaultContents = {\r\n selectedItems: [],\r\n unselectedItems: [],\r\n filter: '',\r\n filterRequisites: [],\r\n };\r\n let defaultreinvokeCommand = {\r\n commandNumber: 0,\r\n commandType: 0,\r\n commandResult: {},\r\n };\r\n contents = Object.assign(defaultContents, contents);\r\n reinvokeCommand = Object.assign(defaultreinvokeCommand, reinvokeCommand);\r\n let args = {\r\n actionName: actionName,\r\n contents: contents,\r\n reinvokeParameters: reinvokeCommand,\r\n };\r\n WA.SRV.call(service, args).done((res) => {\r\n d.resolve(res);\r\n }).fail((res) => {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Установить пользовательский статус для объекта.\r\n *\r\n * @function WebAccess.services.entity.setUserStatus\r\n * @param {object} obj Объект вида {{id: 'ИД', kind: 'Тип', refcode: 'Код справочника'}}\r\n * @param {string} StatusName Наименование пользовательского статуса\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * //Установить пользовательский статус текущего объекта – «Зеленый».\r\n * WA.services.entity.setUserStatus({\"kind\": WA.CR.getKind(), \"id\": WA.CR.getID()}, \"Green\");\r\n */\r\n global.entity.setUserStatus = function (obj, StatusName) {\r\n return global.call(\"/Entity.asmx/SetUserStatus\", {\r\n \"Kind\": obj.kind,\r\n \"ID\": obj.id,\r\n \"StatusName\": StatusName\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Установить пользовательские статусы для всех объектов, расположенных в папке.\r\n *\r\n * @function WebAccess.services.folder.setStatusForAllObjects\r\n * @param {integer} ИД папки\r\n * @param {string} Наименование пользовательского статуса\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @example\r\n *\r\n * //Установить на всех объектах в папке с ИД=1232143 пользовательский статус «Зеленый».\r\n * WA.services.folder.setStatusForAllObjects( 1232143, \"Green\");\r\n */\r\n global.folder.setStatusForAllObjects = function (folderId, statusName) {\r\n return global.call(\"/Folder.asmx/SetStatusForAllObjects\", {\r\n 'FolderID': folderId,\r\n 'StatusName': statusName\r\n });\r\n };\r\n\r\n /**\r\n * Создаёт виртуальную папку.\r\n *\r\n * @function WebAccess.services.folder.createVirtual\r\n * @param {string} folderName Имя папки.\r\n * @param {number} contentType Тип контента виртуальной папки.\r\n * @param {Array} initialContents Список ссылок на объекты системы, выступающие начальным контентом папки.\r\n * @return {Deferred} Результат создания виртуальной папки.\r\n * @since 5.6.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.folder.createVirtual = (folderName, contentType, initialContents) => {\r\n let d = $.Deferred();\r\n\r\n const service = '/api/FolderService.asmx/CreateVirtualFolder';\r\n let args = {\r\n name: folderName,\r\n contentType: contentType,\r\n initialContents: initialContents\r\n }\r\n\r\n WA.SRV.call(service, args).done((res) => {\r\n d.resolve(res);\r\n }).fail((res) => {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n\r\n /**\r\n * Получает наименование записей справочников по ссылке.\r\n *\r\n * @function getReferenceRecordsNames\r\n * @param {Array} ids Список ИД записей справочников.\r\n * @return {Deferred} Наименование записей справочников.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.reference.getReferenceRecordsNames = function (ids) {\r\n var d = $.Deferred();\r\n\r\n WA.SRV.call('/api/LinkQuery.asmx/GetReferenceRecordsById', {\r\n ids: ids\r\n }).done(function (data) {\r\n var jsonObject = JSON.parse(data);\r\n // Преобразуем в ассоциативный массив\r\n var names = {};\r\n jsonObject.forEach(function (item, index) {\r\n var link = new WA.Link(item.id, OBJECT_TYPE.REFERENCE_RECORD, item.compcode);\r\n link['name'] = item.name;\r\n names[item.id] = link;\r\n });\r\n d.resolve(names);\r\n }).fail(function (err) {\r\n d.reject(err);\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n /**\r\n * Удаляет запись справочника.\r\n *\r\n * @function WebAccess.services.reference.deleteRecord\r\n * @param {string} referenceCode Код справочника\r\n * @param {integer} recordID Идентификатор записи справочника\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * WA.SRV.reference.deleteRecord(\"РАБ\",123123).done(\r\n * alert('Запись с id 123123 удалена');\r\n * );\r\n */\r\n global.reference.deleteRecord = function (referenceCode, recordID) {\r\n return global.call(\"/Reference.asmx/DeleteRecord\",\r\n {\r\n \"ReferenceCode\": referenceCode,\r\n \"RecordID\": recordID\r\n },\r\n L('REF_REC_DELETING'),\r\n L('REF_REC_DELETE_COMPLETE')).fail(function () {\r\n WebAccess.components.notifications.Toast.hideAll();\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включает автоподбор ширины колонок.\r\n *\r\n * @function WebAccess.services.reference.columnsAutoWidthEnabled\r\n * @param {string} referenceCode Код справочника\r\n * @param {string} referenceView Представление справочника\r\n * @param {boolean} isEnabled Если параметр имеет значение true, автоподбор ширины колонок будет включен, иначе false\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.columnsAutoWidthEnabled = function (referenceCode, referenceView, isEnabled, opt_placementContext) {\r\n return global.call(\"/Reference.asmx/ColumnsAutoWidthEnabled\", {\r\n \"ReferenceCode\": referenceCode,\r\n \"ReferenceView\": referenceView,\r\n \"PlacementContext\": opt_placementContext || \"\",\r\n \"Enabled\": isEnabled\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает фильтр для справочника.\r\n *\r\n * @function WebAccess.services.reference.setFilter\r\n * @param {string} referenceCode Код справочника\r\n * @param {integer} filterID Идентификатор фильтра\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.setFilter = function (referenceCode, filterID, opt_referenceView, opt_placementContext) {\r\n return global.call(\"/Reference.asmx/SetFilter\", {\r\n \"ReferenceCode\": referenceCode,\r\n \"ReferenceView\": opt_referenceView || \"\",\r\n \"PlacementContext\": opt_placementContext || \"\",\r\n \"FilterID\": filterID\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает новый фильтр для справочника.\r\n * В процессе создания нового фильтра копируются значения фильтрации из автофильтра или из текущего выбранного фильтра.\r\n *\r\n * @function WebAccess.services.reference.createNewFilter\r\n * @param {string} referenceCode Код справочника\r\n * @param {integer} filterName Имя нового фильтра\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.createNewFilter = function (referenceCode, filterName, opt_referenceView, opt_placementContext) {\r\n return global.call(\"/Reference.asmx/CreateNewFilter\", {\r\n \"ReferenceCode\": referenceCode,\r\n \"ReferenceView\": opt_referenceView || \"\",\r\n \"PlacementContext\": opt_placementContext || \"\",\r\n \"Name\": filterName\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохраняет фильтр справочника.\r\n * Веб-сервис изменяет фильтр, идентификатор которого был передан.\r\n * В изменяемый фильтр копируются значения текущего фильтра из базы данных, по умолчанию – автофильтра.\r\n *\r\n * @function WebAccess.services.reference.saveFilter\r\n * @param {string} referenceCode Код справочника\r\n * @param {integer} filterID Идентификатор сохраняемого фильтра\r\n * @param {string} filterName Новое имя фильтра\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.saveFilter = function (referenceCode, filterID, opt_filterName, opt_referenceView, opt_placementContext) {\r\n return global.call(\"/Reference.asmx/SaveFilter\", {\r\n \"ReferenceCode\": referenceCode,\r\n \"ReferenceView\": opt_referenceView || \"\",\r\n \"PlacementContext\": opt_placementContext || \"\",\r\n \"FilterID\": filterID,\r\n \"FilterName\": opt_filterName || \"\"\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаляет фильтр справочника.\r\n *\r\n * @function WebAccess.services.reference.removeFilter\r\n * @param {string} referenceCode Код справочника\r\n * @param {integer} filterID Идентификатор удаляемого фильтра\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.removeFilter = function (referenceCode, filterID, opt_referenceView, opt_placementContext) {\r\n return global.call(\"/Reference.asmx/RemoveFilter\", {\r\n \"ReferenceCode\": referenceCode,\r\n \"ReferenceView\": opt_referenceView || \"\",\r\n \"PlacementContext\": opt_placementContext || \"\",\r\n \"FilterID\": filterID\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает название справочника.\r\n *\r\n * @function WebAccess.services.reference.getReferenceCaption\r\n * @param {string} referenceCode Код справочника\r\n * @return {Deferred} Deferred-объект для управления отложенными вызовами.\r\n */\r\n global.reference.getReferenceCaption = function (referenceCode) {\r\n return global.call(\"/Reference.asmx/GetReferenceCaption\", {\r\n \"ReferenceCode\": referenceCode\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n(function (global) {\r\n /**\r\n * Собрать реквизиты на сервере с помощью асинхронного вызова.\r\n *\r\n * @function WebAccess.services.requisite.build\r\n * @param {object} model Модель для построения реквизитов\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7100\r\n */\r\n global.build = function (model) {\r\n return WA.SRV.call(\"/Requisite.asmx/Build\", { \"Model\": model });\r\n };\r\n\r\n /**\r\n * Собрать реквизиты на сервере с помощью синхронного вызова.\r\n *\r\n * @function WebAccess.services.requisite.buildSync\r\n * @param {object} model Модель для построения реквизитов\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7100\r\n */\r\n global.buildSync = function (model) {\r\n return WA.SRV.callSync(\"/Requisite.asmx/Build\", { \"Model\": model });\r\n };\r\n\r\n})(window.WebAccess.services.requisite);\r\n","\"use strict\";\r\n(function (global) {\r\n /**\r\n * Запустить ISBL-сценарий.\r\n *\r\n * @tutorial services \r\n * @function WebAccess.services.script.run\r\n * @param {string} scriptName Имя ISBL-сценария\r\n * @param {dictionary} scriptParameters Параметры, передаваемые сценарию \r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * WA.SRV.script.run(\"WADemoTest\", {\"id\": 10});\r\n * WA.SRV.script.run(\"WADemoTest\", {\"id\": 10}).success(function(result) { alert(result); }); \r\n */\r\n global.script.run = function (scriptName, scriptParametes) {\r\n return global.call('/Script.asmx/Run', { 'Name': scriptName, 'Params': scriptParametes });\r\n };\r\n\r\n /**\r\n * Запустить ISBL-сценарий с передачей сериализованной формы.\r\n *\r\n * @tutorial services \r\n * @function WebAccess.services.script.run\r\n * @param {string} scriptName Имя ISBL-сценария.\r\n * @param {dictionary} serializedForm Сериализированные реквизиты формы. \r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * WA.SRV.script.runWithSerializedForm(\"WADemoTest\", dialog.form.serialize({\r\n onlyValue: true,\r\n useRowNumber: true,\r\n withoutTables: true,\r\n transformMultiReqsToDetailRows: true\r\n }));\r\n */\r\n global.script.runWithSerializedForm = function (scriptName, serializedForm) {\r\n return global.call('/Script.asmx/RunWithSerializedForm', { 'Name': scriptName, 'SerializedForm': serializedForm });\r\n };\r\n\r\n})(window.WebAccess.services);","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Изменить региональные настройки веб-доступа.\r\n * Настройки применяют после завершения сессии пользователя.\r\n *\r\n * @function WebAccess.services.session.SetNewLanguage\r\n * @param {string} langCode Язык пользовательского интерфейса. Возможные значения: ru-RU, en-EN\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7200\r\n */\r\n global.session.SetNewLanguage = function (langCode) {\r\n return global.call(\"/Session.asmx/SetNewLanguage \", { LangCode: langCode });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Изменить масштаб предпросмотра для всех документов.\r\n *\r\n * @param {string} caleValue Масштаб предпросмотра\r\n * @function WebAccess.services.session.setPreviewScale\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.1.0.1505\r\n * @deprecated since 5.7.\r\n *\r\n * @example\r\n * // Установить 100%-масштаб предпросмотра для всех документов.\r\n * WebAccess.services.session.setPreviewScale(\"100%\").done(function() {\r\n * location.reload();\r\n * });\r\n */\r\n global.session.setPreviewScale = function (scaleValue) {\r\n const previewScaleStorageName = `preview-${WA.getLocation()}-previewScale`;\r\n localStorage.setItem(previewScaleStorageName, scaleValue);\r\n };\r\n\r\n /**\r\n * DEPRECATED\r\n * Изменить тему и сохранить ее имя в профиле пользователя.\r\n *\r\n * @function WebAccess.services.session.setTheme\r\n * @param {string} themeName Имя темы. Например, «green», «gray».\r\n * @param {string} themeType Вариант темы. Возможные значения: light, dark.\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @since 5.0.0.4301\r\n * @deprecated As of 5.5.0.1801\r\n * @example\r\n *\r\n * // Изменить текущую тему на стандартную – светло-голубую тему в темном варианте.\r\n * WebAccess.services.session.setTheme(\"blue\",\"dark\").done(function() {\r\n * location.reload();\r\n * });\r\n */\r\n global.session.setTheme = function (themeName, opt_themeType) {\r\n // Оставили на тот случай, если в подключаемых модулях этот метод еще используется\r\n return {'success': false, 'warning': 'Themes are deprecated'};\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * DEPRECATED\r\n * Установить параметры пользовательской темы.\r\n *\r\n * @function WebAccess.services.session.setCustomTheme\r\n * @param {string} themeType Вариант темы. Возможные значения: light, dark.\r\n * @param {array} backgroundColor Базовый цвет фона темы, например, [126,233,12]\r\n * @param {array} textColor Базовый цвет текста\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @since 5.0.0.4301\r\n * @deprecated As of 5.5.0.1801\r\n * @example\r\n *\r\n * // Изменить текущую тему на произвольную с произвольными цветами.\r\n * WebAccess.services.session.setCustomTheme(\"light\",[215,226,213],[0,0,0]).done(function() {\r\n * location.reload()\r\n * });\r\n */\r\n global.session.setCustomTheme = function (themeType, backgroundColor, textColor) {\r\n return {'success': false, 'warning': 'Themes are deprecated'};\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавляет новый объект в справочник, в котором содержатся последние выбранные объекты.\r\n *\r\n * @function WebAccess.services.session.addLastUsedObject\r\n * @param {string} referenceName Код справочника\r\n * @param {array} objectID ИД объекта\r\n * @param {array} objectName Имя объекта\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7200\r\n *\r\n * @example\r\n * // Добавить в справочник «Пользователи» объект с ИД=132970, наименование которого «Петров Иван Федорович».\r\n * WebAccess.services.session.addLastUsedObject(\"ПОЛ\", 132970, \"Петров Иван Федорович\");\r\n */\r\n global.session.addLastUsedObject = function (referenceName, objectID, objectName) {\r\n return global.call(\"/Session.asmx/AddLastUsedObject\", {ObjectID: objectID, ObjectName: objectName, ReferenceName: referenceName });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n *\r\n * Удаляет объект из справочника, в котором содержатся последние выбранные объекты.\r\n *\r\n * @function WebAccess.services.session.removeLastUsedObject\r\n * @param {array} objectID ИД объекта\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7200\r\n *\r\n * @example\r\n * // Удалить объект с ИД=132970 из списка последних выбранных.\r\n * WebAccess.services.session.removeLastUsedObject(132970);\r\n */\r\n global.session.removeLastUsedObject = function (objectID) {\r\n return global.call(\"/Session.asmx/RemoveLastUsedObject\", { ObjectID: objectID });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить ссылки на объект.\r\n *\r\n * @function WebAccess.services.session.deleteLinks\r\n * @param {WA.Link[]} links Ссылки для удаления\r\n * @param {integer} sourceID ИД источника, где хранятся ссылки\r\n * @param {OBJECT_TYPE} SourceType Тип источника\r\n * @param {WA.Link[]} unselectedLinks список невыбранных ссылок\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7200\r\n */\r\n global.session.deleteLinks = function (links, sourceID, sourceType, unselectedLinks) {\r\n var items = [];\r\n for (var i = 0; i < links.length; i++) {\r\n items[i] = links[i].toLinkModel();\r\n }\r\n var params = {\r\n Links: items,\r\n SourceID: sourceID,\r\n SourceType: objectTypeToString(sourceType),\r\n UnselectedLinks: unselectedLinks || [],\r\n };\r\n\r\n log.info('DELETE_LINKS', $.toJSON(params));\r\n return global.call(\"/Session.asmx/DeleteLinks\", params);\r\n };\r\n\r\n\r\n /**\r\n * Вставить ссылки на объект.\r\n\r\n * @function WebAccess.services.session.pasteLinks\r\n * @param {WA.Link[]} links Ссылки для вставки\r\n * @param {integer} sourceID ИД источника, куда копируются ссылки\r\n * @param {OBJECT_TYPE} SourceType Тип источника\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7200\r\n */\r\n global.session.pasteLinks = function (links, destID, destType) {\r\n var items = [];\r\n for (var i = 0; i < links.length; i++) {\r\n items[i] = links[i].toLinkModel();\r\n }\r\n var params = {\r\n Links: items,\r\n DestID: destID,\r\n DestType: objectTypeToString(destType)\r\n };\r\n\r\n log.info('PASTE_LINKS', $.toJSON(params));\r\n\r\n return global.call(\"/Session.asmx/PasteLinksList\", { Links: items, DestID: destID, DestType: objectTypeToString(destType) });\r\n };\r\n\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Создать задачу с вложениями.\r\n *\r\n * @function WebAccess.services.task.createTaskWithAttachments\r\n * @param {array} attachments Массив объектов вида {{ID: 'ИД', Kind: 'Тип', CompCode: 'Код справочника'}}\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * //Создать задачу с вложением.\r\n * //В данном приере вложение - это текущий объект.\r\n * //После создания задачи откроется ее карточка.\r\n * var call = WA.services.task.createTaskWithAttachments([{ 'ID': WA.current.getID(),\r\n * 'Kind': WA.current.getKind(),\r\n * 'CompCode': WA.current.getReferenceCode }])\r\n * call.success(function (res) {\r\n * window.open(\"Task.aspx?view=Card&mode=edit&id=\" + res, \"task\" + res);\r\n * });\r\n */\r\n global.task.createTaskWithAttachments = function (attachments) {\r\n return global.callSync(\"/Task.asmx/CreateTaskWithAttachments\", {\r\n Attachments: attachments\r\n });\r\n };\r\n\r\n /**\r\n * Установить права на вложения задачи.\r\n *\r\n * @function WebAccess.services.task.setAttachmentsRights\r\n * @param {int} taskID ИД задачи\r\n * @param {int} rights Устанавливаемый тип прав\r\n * @return {Deferred} deferred-объект для управления отложенными вызовами.\r\n * @example\r\n *\r\n * //Запретит доступ к вложениям текущей задачи.\r\n * WebAccess.services.task.setAttachmentsRights(WA.CR.getID(), ACCESS_RIGHTS.NO_ACCESS).;\r\n */\r\n global.task.setAttachmentsRights = function (taskID, rights) {\r\n return global.callSync(\"/Task.asmx/SetAttachmentsRights\", {\r\n TaskID: taskID, Rights: rights\r\n }, null, null, true);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.WebAccess.services);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n \r\n \t/**\r\n \t * Генераторы модальных окон.\r\n *\r\n \t * @namespace WebAccess.components.dialogs\r\n * @since 5.0.0.4000 \r\n *\r\n * @example\r\n * // Создать и показать новое диалоговое окно.\r\n * var dialog = new WebAccess.components.dialogs.BaseDialog();\r\n * dialog.show();\r\n * // Создать и показать диалог множественного выбора.\r\n * var multiSelectDialog = new WebAccess.components.dialogs.BaseMultiSelect([],[]);\r\n * multiSelectDialog.show();\r\n \t */\r\n\r\n global.components.dialogs = {};\r\n\r\n /**\r\n * Диалоговое окно \"Вы уверены что хотите выйти из веб-доступа\" [пока в игноре]\r\n * @function WebAccess.components.dialogs.showLogoutPrompt\r\n * @ignore\r\n * @since 5.0.0.7300\r\n */\r\n global.components.dialogs.showLogoutPrompt = function () {\r\n var exit = function (message) {\r\n if ($(\"#ExitForm\").length === 0)\r\n ConfirmDialogNew({ text: message, width: 400, height: 'auto' }, logout);\r\n };\r\n exit(L('CONFIRM_EXIT'));\r\n return global.components.dialogs;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Диалоговое окно \"Вы уверены что хотите выйти из веб-доступа\" [пока в игноре]\r\n * @function WebAccess.components.dialogs.showLogoutPrompt \r\n * @ignore\r\n * @since 5.0.0.7300\r\n */\r\n global.components.dialogs.showReportParams = function (reportName, id, refcode) {\r\n ShowReportParams(reportName, id, refcode);\r\n };\r\n\r\n /**\r\n * Генераторы контекстных меню.\r\n *\r\n * @namespace WebAccess.components.menus \r\n * @since 5.0.0.4000\r\n */\r\n global.components.menus = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Генераторы форм и прочих элементов ввода.\r\n *\r\n * @namespace WebAccess.components.forms \r\n * @since 5.0.0.4000\r\n */\r\n global.components.forms = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Генераторы контролов реквизитов.\r\n *\r\n * @since 5.0.0.4000\r\n * @namespace WebAccess.components.forms.requisites\r\n */\r\n global.components.forms.requisites = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n *\r\n * @namespace WebAccess.components.wrappers\r\n * @since 5.0.0.4011\r\n */\r\n global.components.wrappers = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n \r\n\r\n /**\r\n * Обертки для таблиц – оберток детальных разделов набора данных. \r\n * @since 5.0.0.4011\r\n * @namespace WebAccess.components.wrappers.details\r\n */\r\n global.components.wrappers.details = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов форм.\r\n * @since 5.0.0.4011\r\n * @namespace WebAccess.components.wrappers.form\r\n */\r\n global.components.wrappers.form = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для дерева папок\r\n * @since 5.2.0.1600\r\n * @namespace WebAccess.components.wrappers.folderTree\r\n */\r\n global.components.wrappers.folderTree = {};\r\n\r\n /**\r\n * Обертки для существующих реквизитов.\r\n * @since 5.0.0.7100\r\n * @namespace WebAccess.components.wrappers.form.requisites\r\n */\r\n global.components.wrappers.form.requisites = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для существующих реквизитов.\r\n * @since 5.0.0.7100\r\n * @private\r\n * @namespace WebAccess.components.wrappers.form.requisites._details\r\n */\r\n global.components.wrappers.form.requisites._details = {};\r\n\r\n /**\r\n * Обертки для списка объектов.\r\n * @since 5.0.0.4011\r\n * @namespace WebAccess.components.wrappers.objectList\r\n */\r\n global.components.wrappers.objectList = {};\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Обертки для элементов боковой панели страницы.\r\n * @since 5.0.0.4011\r\n * @namespace WebAccess.components.wrappers.sideBar\r\n */\r\n global.components.wrappers.sideBar = {};\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов ленты.\r\n * @since 5.0.0.4011\r\n * @namespace WebAccess.components.wrappers.toolBar\r\n */\r\n global.components.wrappers.toolBar = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Уведомления.\r\n * @since 5.0.0.4305\r\n * @namespace WebAccess.components.notifications\r\n */\r\n global.components.notifications = global.components.NTF = {}; \r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n * @since 5.2.0.1100\r\n * @namespace WebAccess.components.dataViews \r\n */\r\n global.components.dataViews = global.components.DV = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n * @since 5.2.0.1100\r\n * @namespace WebAccess.components.dataViews.gridPlugins \r\n */\r\n global.components.dataViews.gridPlugins = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n * @since 5.2.0.1100\r\n * @private\r\n * @namespace WebAccess.components.dataViews.gridPlugins._controls \r\n */\r\n global.components.dataViews.gridPlugins._controls = {};\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n * @since 5.2.0.1100\r\n * @private\r\n * @namespace WebAccess.components.dataViews.gridPlugins._editors \r\n */\r\n global.components.dataViews.gridPlugins._editors = {};\r\n\r\n /**\r\n * Обертки для элементов страниц.\r\n * @since 5.2.0.1100\r\n * @private\r\n * @namespace WebAccess.components.dataViews.gridPlugins._controls.selectList\r\n */\r\n global.components.dataViews.gridPlugins._controls.selectList = {\r\n passEventToContainer: function (element, event) {\r\n var jEl = $(element);\r\n var params = [jEl.is(\":checked\"), jEl.val(), jEl.text(), jEl.data('type')];\r\n jEl.parents('.container').trigger(event, params);\r\n return true;\r\n },\r\n\r\n SPECIAL_VALUE: {\r\n ALL: 'ALL',\r\n BLANK: 'BLANK',\r\n NOBLANK: 'NOBLANK'\r\n },\r\n\r\n DATE_SPECIAL_VALUE: {\r\n YESTERDAY: 'YESTERDAY',\r\n TODAY: 'TODAY',\r\n TOMORROW: 'TOMORROW',\r\n THIS_WEEK: 'THIS_WEEK',\r\n THIS_MONTH: 'THIS_MONTH',\r\n THIS_YEAR: 'THIS_YEAR'\r\n }\r\n };\r\n \r\n\r\n})(window.WebAccess);","\"use strict\";\r\n(function baseDataProviderDefinition(global) {\r\n\r\n /**\r\n * Базовый класс провайдера данных. \r\n * @since 5.2.0.1100\r\n * @class WebAccess.components.dataViews.BaseDataProvider\r\n * @extends BaseObject\r\n * @property {object} defaults Конфигурация по умолчанию\r\n */\r\n global.BaseDataProvider = BaseObject.extend({\r\n defaults: null,\r\n\r\n init: function (settings) {\r\n this._super(settings);\r\n this.defaults = {};\r\n },\r\n\r\n /**\r\n * Загружает данные.\r\n *\r\n * Метод в чистом виде не используется. Переопределяется наследниками. \r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.BaseDataProvider#load\r\n * @return {deferred} Deferred-объект\r\n */\r\n load: function (loadOptions) {\r\n var result = $.Deferred();\r\n var data = [];\r\n\r\n result.resolve(data);\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Получает количество записей.\r\n *\r\n * Метод в чистом виде не используется. Переопределяется наследниками. \r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.BaseDataProvider#totalCount\r\n * @return {deferred} Deferred-объект\r\n */\r\n totalCount: function (filter) {\r\n var result = $.Deferred();\r\n var count = 0;\r\n\r\n result.resolve(count);\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Загружает конфигурацию.\r\n *\r\n * Метод в чистом виде не используется. Переопределяется наследниками. \r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.BaseDataProvider#loadState\r\n * @return {deferred} Deferred-объект\r\n */\r\n loadState: function () {\r\n var result = $.Deferred();\r\n var state = {};\r\n\r\n result.resolve(state);\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Сохраняет конфигурацию.\r\n *\r\n * @method WebAccess.components.dataViews.BaseDataProvider#saveState\r\n * @return {Deferred}\r\n * @since 5.2.0.1100\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n saveState: function () {\r\n var result = $.Deferred();\r\n var savedWithoutErrors = true;\r\n\r\n result.resolve(savedWithoutErrors);\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Расширяет конфигурацию.\r\n *\r\n * @method WebAccess.components.dataViews.BaseDataProvider#extendDefaults\r\n * @since 5.2.0.1100\r\n * @return {object} Расширенная конфигурация\r\n */\r\n extendDefaults: function (loadOptions) {\r\n var me = this;\r\n return $.extend({}, this.defaults, loadOptions);\r\n }\r\n });\r\n\r\n})(WA.CMP.dataViews);","(function slectListDefinition(global) {\r\n \"use strict\";\r\n\r\n var ELLIPSIS = '...';\r\n var TEMPLATES = {\r\n MAIN_INPUT: '/components/selectList/mainInput.compile.html',\r\n LIST_RECORD: '/components/selectList/listRecord.compile.html',\r\n POPUP_AREA: '/components/selectList/popup.compile.html'\r\n };\r\n var LOAD_MARGIN = 50;\r\n\r\n /**\r\n * Поле с выпадающим списком.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl;\r\n * @extends BaseObject\r\n * @mixes WebAccess.mixins.pluginMixin\r\n * @since 5.2.0.1300\r\n * @param {string} containerSelector Блок, содержащий таблицу;\r\n * @param {WebAccess.components.dataViews.DataProvider} dataProvider Класс, предоставляющий данные для поля с выпадающим списком; \r\n * @param {Object} defaults Дополнительные параметры;\r\n * @property {String} className Имя класса\r\n * @property {String} instanceID Идентификатор поля с выпадающим списком\r\n * @property {String} listInstanceID Идентификатор выпадающего списка\r\n * @property {String} dataProvider Класс, предоставляющий данные поля с выпадающим списком \r\n * @property {String} minWidth Минимальная ширина выпадающего списка \r\n * @property {object} state Объект, хранящий параметры текущего поля\r\n */\r\n var SelectListControl = global.SelectListControl = BaseObject.extend([WA.mixins.pluginMixin], {\r\n className: \"SelectListControl\",\r\n instanceID: null,\r\n listInstanceID: null,\r\n containerSelector: null,\r\n dataProvider: null,\r\n state: {},\r\n minWidth: 260,\r\n\r\n _jContainer: null,\r\n _jDropDownIcon: null,\r\n _jWait: null,\r\n _jInput: null,\r\n _jOk: null,\r\n _jCancel: null,\r\n _jCheckBoxContaier: null,\r\n\r\n _spinnerTimeout: null,\r\n\r\n init: function (containerSelector, dataProvider, defaults) {\r\n var me = this;\r\n\r\n me._super();\r\n me.state = {\r\n selectedRecords: []\r\n };\r\n\r\n me.state = $.extend({}, me.state, defaults);\r\n\r\n me.dataProvider = dataProvider;\r\n me.instanceID = generateUniqueID();\r\n me.listInstanceID = generateUniqueID();\r\n me.containerSelector = containerSelector;\r\n me._jContainer = $(containerSelector);\r\n me._render();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отрисовка контрола и вставка его в контейнер\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_render \r\n * @private \r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _render: function () {\r\n var me = this;\r\n var template = WA.templates.render(TEMPLATES.MAIN_INPUT, {\r\n ID: me.instanceID,\r\n initialValue: me._getInputValue()\r\n }).done(function (html) {\r\n me._jContainer.html(html);\r\n me._initControls();\r\n me._bindEvents();\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение значения основного input-а\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_getInputValue\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {String} значение\r\n */\r\n _getInputValue: function () {\r\n var me = this;\r\n return ((me.state.selectedRecords && me.state.selectedRecords.length) || (me.state.notSelectedRecords && me.state.notSelectedRecords.length)) ? ELLIPSIS : me.state.like;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение jquery объектов контролов\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_initControls\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _initControls: function () {\r\n var me = this;\r\n me._jDropDownIcon = $('.DropDown_Arrow', me.containerSelector);\r\n me._jInput = $('input.input', me.containerSelector);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навешивание событий на существующие контролы поля ввода\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_bindEvents\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _bindEvents: function () {\r\n var me = this;\r\n me._jDropDownIcon.click($.proxy(me.openList, me));\r\n me._jInput.on('change', $.proxy(me._applyLike, me));\r\n me._jInput.on('focus', $.proxy(me._hideEllipsis, me));\r\n me._jInput.on('blur', $.proxy(me._showEllipsis, me));\r\n me._jInput.on('keyup', $.proxy(me._applyOnEnter, me));\r\n\r\n\r\n if (me.state.column && me.state.column.type === 'Date') {\r\n // По Enter дописываем все остальные части даты. Если ввесли только день, то дописываем месяц и год. Если ввели день и месяц, то дописываем год.\r\n me._jInput.on('keydown.dateControl', function (e) {\r\n var key = e.which || e.keyCode;\r\n\r\n if (key === 13) {\r\n var inp = me._jInput;\r\n var date = ParseDateTime(inp);\r\n inp.val(formatDate(date));\r\n inp.change();\r\n me.close();\r\n }\r\n\r\n if ((key === 59 || key === 186) && e.ctrlKey) {\r\n var inp = me._jInput;\r\n inp.val(formatDate(new Date()));\r\n inp.change();\r\n me.close();\r\n }\r\n\r\n });\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Применение фильтрации при нажатии на enter в поле для like-ввода\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_applyOnEnter\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _applyOnEnter: function (e, d) {\r\n var me = this;\r\n var charCode = e.which || e.keyCode;\r\n if (charCode === 13) {\r\n me._jInput.trigger('change');\r\n }\r\n return me;\r\n },\r\n\r\n /**\r\n * При фокусе на поле ввода скрываем многоточие\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_hideEllipsis\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _hideEllipsis: function () {\r\n var me = this;\r\n if (me._jInput.val() === ELLIPSIS) me._jInput.val('');\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * При потере фокуса показываем многоточие, если поле пустое и есть выбранные элементы\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_showEllipsis\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _showEllipsis: function () {\r\n var me = this;\r\n if (me.state.selectedRecords && me.state.selectedRecords.length) me._jInput.val(ELLIPSIS);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Означивание элементов выпадающего списка\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_initListControls\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _initListControls: function () {\r\n var me = this;\r\n me._jList = $(\"#\" + me.listInstanceID);\r\n me._jWait = me._jList.find('.jsSpinner');\r\n me._jCheckBoxContaier = me._jList.find('ul');\r\n me._jOk = me._jList.find('.jsOk');\r\n me._jCancel = me._jList.find('.jsCancel');\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навешивание событий на элементы выпадающего списка\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_bindListEvents\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _bindListEvents: function () {\r\n var me = this;\r\n me._jList.on('_change', function (ev, isChecked, value, display, type) {\r\n me.fire(SelectListControl.EVENT.ITEM_SELECT, isChecked, value, display, type);\r\n });\r\n me._jOk.on('click', $.proxy(me._applyList, me));\r\n me._jCancel.on('click', $.proxy(me.close, me));\r\n me._jCheckBoxContaier.on('scroll', $.proxy(me._handleScroll, me));\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрываем открытые контекстные меню.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_hideOpenedControls\r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl}\r\n */\r\n _hideOpenedControls: function () {\r\n ContextMenu.hideAll();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет, открыт ли выпадающий список.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#isOpened \r\n * @since 5.2.0.1300\r\n * @return {Boolean} \r\n */\r\n isOpened: function () {\r\n var me = this;\r\n var jList = $(\"#\" + me.listInstanceID);\r\n return !!jList.length;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открывает выпадающий список.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#openList \r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n openList: function () {\r\n var me = this;\r\n if (me.isOpened()) {\r\n me.close();\r\n return;\r\n };\r\n\r\n me.state.page = 0;\r\n me.state.skip = 0;\r\n\r\n me._spinnerTimeout = setTimeout(function () {\r\n me._jDropDownIcon.addClass('circle-spinner select-list__spinner');\r\n }, 200);\r\n\r\n me.dataProvider.load(me.state).done(function (records) {\r\n clearTimeout(me._spinnerTimeout);\r\n me._jDropDownIcon.removeClass('circle-spinner select-list__spinner');\r\n\r\n var partials = {\r\n listRecord: TEMPLATES.LIST_RECORD\r\n };\r\n\r\n var leftPosition = null;\r\n var winWidth = $(window).width();\r\n var rightPosition = (winWidth - (me._jContainer.offset().left + me._jContainer.outerWidth()));\r\n\r\n if (winWidth - rightPosition < me.minWidth) {\r\n leftPosition = me._jContainer.offset().left;\r\n }\r\n if (rightPosition === 0 && leftPosition === null) {\r\n rightPosition = 1; //0 воспринимается шаблоном как false и от этого right не задается\r\n };\r\n\r\n me.fire(SelectListControl.EVENT.BEFORE_LIST_OPEN, me, records);\r\n var template = WA.templates.render(TEMPLATES.POPUP_AREA,\r\n {\r\n instanceID: me.listInstanceID,\r\n values: records,\r\n okText: L('OK'),\r\n cancelText: L('CANCEL'),\r\n waitText: L('WAIT'),\r\n position: {\r\n right: rightPosition,\r\n left: leftPosition,\r\n top: me._jContainer.offset().top + me._jContainer.outerHeight(),\r\n width: me._jContainer.width(),\r\n minWidth: me.minWidth\r\n }\r\n }, null, null, partials).done(function (html) {\r\n $('body').append(html);\r\n me._initListControls();\r\n me._bindListEvents();\r\n });\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Запуск дозагрузки списка при прокрутке\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_handleScroll \r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n _handleScroll: function (event, data) {\r\n var me = this;\r\n var area = event.target;\r\n var jArea = me._jCheckBoxContaier;\r\n\r\n if (jArea.scrollTop() + jArea.innerHeight() >= area.scrollHeight - LOAD_MARGIN) {\r\n me._appendRecords();\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Дозагрузки списка при прокрутке\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_appendRecords \r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n _appendRecords: function () {\r\n var me = this;\r\n if (me.state.isPending) return;\r\n\r\n me.state.page++;\r\n me.state.isPending = true;\r\n me.state.skip = me.state.take * me.state.page;\r\n\r\n var timeout = setTimeout(function () {\r\n me._jWait.fadeIn(200);\r\n }, 500);\r\n\r\n me.dataProvider.load(me.state).done(function (records) {\r\n me.fire(SelectListControl.EVENT.BEFORE_RECORDS_APPEND, records, me);\r\n me.state.isPending = false;\r\n clearTimeout(timeout);\r\n\r\n me._jWait.fadeOut(400);\r\n _(records).each(function (record) {\r\n //Здесь синхронно потому, что порядок важен\r\n\r\n WA.templates.render(TEMPLATES.LIST_RECORD, record, false, true).done(function (line) {\r\n me._jCheckBoxContaier.append(line);\r\n });\r\n });\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Обработка значения like-поиска\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_applyLike \r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n _applyLike: function () {\r\n var me = this;\r\n var currentLike = (me._jInput.val() !== ELLIPSIS) ? me._jInput.val() : '';\r\n var recordsCount = me.state.selectedRecords.length + me.state.notSelectedRecords.length; //чтобы работал сброс по enter-у\r\n me.state.selectedRecords = [];\r\n me.state.notSelectedRecords = [];\r\n me.state.invertedMode = false;\r\n\r\n if (!me._validateLike(currentLike)) {\r\n me._jInput.val('');\r\n return me;\r\n }\r\n\r\n if (me.state.like !== currentLike || recordsCount > 0) {\r\n me.state.like = currentLike;\r\n me.fire(SelectListControl.EVENT.VALUE_CHANGED, me.getValue());\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Валидация значения like фильтра.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_validateLike \r\n * @private\r\n * @since 5.4.0.1035\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n _validateLike: function (value) {\r\n var me = this;\r\n switch (me.state.column.type) {\r\n case \"Integer\":\r\n return !isNaN(+value);\r\n case \"Float\":\r\n return !isNaN(+value.replaceAll(',', '.'));\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработка выбранных записей\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#_applyList \r\n * @private\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n _applyList: function () {\r\n var me = this;\r\n me.state.selectedRecords = me.state.selectedRecords || [];\r\n me.state.notSelectedRecords = me.state.notSelectedRecords || [];\r\n\r\n function getElementIdFromValue(value) {\r\n let id = (\"\" + value).makeSafeString();\r\n if (id === '_') {\r\n switch (value) {\r\n case '+': id = 'APPROVED'; break;\r\n case '?': id = 'DISAPPROVED'; break;\r\n default: id = 'UNSPECIFIED'; break;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n //Убираем из списка выбранных снятые галочки\r\n me.state.selectedRecords = _(_(me.state.selectedRecords).map(function (record, index) {\r\n let id = getElementIdFromValue(record.Value);\r\n let jOption = me._jList.find('#' + id + '-list-option');\r\n if (jOption.length && !jOption.is(':checked')) {\r\n return\r\n } else {\r\n return me.state.selectedRecords[index]\r\n }\r\n })).compact();\r\n\r\n\r\n //Убираем из списка невыбранных отмеченные галочки\r\n me.state.notSelectedRecords = _(_(me.state.notSelectedRecords).map(function (record, index) {\r\n let id = getElementIdFromValue(record.Value);\r\n let jOption = me._jList.find('#' + id + '-list-option');\r\n if (jOption.length && jOption.is(':checked')) {\r\n return\r\n } else {\r\n return me.state.notSelectedRecords[index]\r\n }\r\n })).compact();\r\n\r\n /**\r\n * Запись входит в список обектов\r\n */\r\n var isExist = function (value, isInverted) {\r\n if (isInverted) {\r\n return !!_(me.state.notSelectedRecords).find(function (r) { return r.Value === value });\r\n } else {\r\n return !!_(me.state.selectedRecords).find(function (r) { return r.Value === value });\r\n }\r\n };\r\n\r\n\r\n //Добавляем в список новые отмеченные галочки \r\n me._jList.find('input[type=checkbox]:checked').each(function () {\r\n var value = $(this).val();\r\n if (!isExist(value, false)) {\r\n me.state.selectedRecords.push({\r\n Type: $(this).data('type'),\r\n Value: value,\r\n DisplayValue: $(this).attr('title')\r\n });\r\n };\r\n });\r\n\r\n //Добавляем в список новые неотмеченные галочки \r\n me._jList.find('input[type=checkbox]:not(:checked)').each(function () {\r\n var value = $(this).val();\r\n if (!isExist(value, true)) {\r\n me.state.notSelectedRecords.push({\r\n Type: $(this).data('type'),\r\n Value: value,\r\n DisplayValue: $(this).attr('title')\r\n });\r\n };\r\n });\r\n\r\n if (me.state.selectedRecords && me.state.selectedRecords.length) {\r\n me._jInput.val(ELLIPSIS);\r\n } else {\r\n me._jInput.val('');\r\n }\r\n\r\n me.state.like = '';\r\n me.close();\r\n me.fire(SelectListControl.EVENT.VALUE_CHANGED, me.getValue());\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновляет состояние поля.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#updateState \r\n * @param {Object} newState Новое состояние\r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n updateState: function (newState) {\r\n var me = this;\r\n $.extend(me.state, newState);\r\n me._jInput.val(me._getInputValue());\r\n me.close();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Закрывает выпадающий список.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#close \r\n * @since 5.2.0.1300\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl} \r\n */\r\n close: function () {\r\n var me = this;\r\n if (!me._jOk) return;\r\n me._jOk.off('click');\r\n me._jCancel.off('click');\r\n me._jList.remove();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значение поля.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl#getValue \r\n * @since 5.2.0.1300\r\n * @return {Object} Значение поля.\r\n */\r\n getValue: function () {\r\n var me = this;\r\n var filterType = (me.state.selectedRecords && me.state.selectedRecords.length) ? 'In' : 'Like';\r\n var equalRes = null;\r\n\r\n var columnType = me.state.column.type;\r\n //Сравнение для числовых типов по лайк вводу на равно\r\n if (((columnType === 'Float') || (columnType === 'Integer')) && (filterType === 'Like')) {\r\n if (me.state.like) {\r\n me.state.like = me.state.like.replaceAll(',', '.');\r\n }\r\n filterType = 'Equal';\r\n equalRes = $.trim(me.state.like);\r\n }\r\n\r\n var value = {\r\n 'Like': $.trim(me.state.like),\r\n 'In': me.state.selectedRecords,\r\n 'Equal': equalRes,\r\n 'Type': filterType\r\n }\r\n\r\n me.fire(SelectListControl.EVENT.ON_GET_VALUE, me, value);\r\n\r\n if (me.state.invertedMode) {\r\n value.In = me.state.notSelectedRecords;\r\n value.Type = 'Exclude'\r\n };\r\n\r\n return value;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n }, {\r\n EVENT: {\r\n /**\r\n * Срабатывает перед получением значения из поля.\r\n *\r\n * @event WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl.EVENT.ON_GET_VALUE\r\n * @param {Object} selectList ссылка на экземпляр класса контрола\r\n * @param {Object} byref_value Значение \r\n */\r\n ON_GET_VALUE: 'getValue',\r\n\r\n /**\r\n * Срабатывает при смене значения в поле.\r\n *\r\n * @event WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl.EVENT.VALUE_CHANGED\r\n * @param {Object} byref_value Значение \r\n */\r\n VALUE_CHANGED: 'change',\r\n\r\n /**\r\n * Срабатывает при выборе одного из значений выпадающего списка.\r\n *\r\n * @event WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl.EVENT.ITEM_SELECT\r\n * @param {Object} isChecked Выбранный элемент списка. \r\n * @param {Object} value Значение выбранного элемента. \r\n * @param {Object} displayValue Значение поля.\r\n */\r\n ITEM_SELECT: 'select',\r\n\r\n /**\r\n * Срабатывает перед открытием выпадающего списка.\r\n *\r\n * @event WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl.EVENT.BEFORE_LIST_OPEN\r\n * @param {Object} selectList Ссылка на экземпляр класса поля\r\n * @param {Object} items Список начальных элементов выпадающего списка \r\n */\r\n BEFORE_LIST_OPEN: 'beforeListOpen',\r\n\r\n /**\r\n * Срабатывает при добавлении новых записей в выпадающий список.\r\n *\r\n * @event WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectListControl.EVENT.BEFORE_RECORDS_APPEND\r\n * @param {Object} isChecked Значение \r\n * @param {Object} items Новые элементы списка \r\n */\r\n BEFORE_RECORDS_APPEND: 'beforeRecordsAppend'\r\n }\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._controls.selectList);","(function checkboxPlugin(global) {\r\n \"use strict\";\r\n\r\n var SPECIAL_VALUE = global.DATE_SPECIAL_VALUE;\r\n var CONTROL_EVENT = global.SelectListControl.EVENT;\r\n\r\n /**\r\n * Плагин для добавления специавльных значений \"Все\", \"Пустые\", \"Не пустые\" для контрола SelectList\r\n * @class WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя плагина. \r\n * @since 5.2.0.1300\r\n */\r\n global.DateValuesPlugin = WA.Plugin.extend({\r\n name: 'SpecialValuesPlugin',\r\n\r\n _selectList: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрация плагина.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#register\r\n * @param {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectList} расширяемый экземпляр\r\n * @since 5.2.0.1300\r\n * @return {object} публичные методы доступные расширяемому объекту.\r\n */\r\n register: function (selectList) {\r\n var me = this;\r\n me._selectList = selectList\r\n .bind(CONTROL_EVENT.BEFORE_LIST_OPEN, $.proxy(me._beforeListOpen, me))\r\n .bind(CONTROL_EVENT.BEFORE_RECORDS_APPEND, $.proxy(me._beforeRecordsAppend, me)) \r\n return {};\r\n },\r\n \r\n /**\r\n * Признак того что были выбраны все записи\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_onRecordSelect\r\n * @return {Boolean}\r\n */\r\n _isAllSelected: function () {\r\n var me = this; \r\n return me._selectList._jList.find('#' + SPECIAL_VALUE.ALL + '-list-option').is(':checked');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Проверка наличия значения в списке объектов\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_isExist\r\n * @param {string} value проверяемое значение\r\n * @return {Boolean}\r\n */\r\n _isExist: function (value, isInverted) {\r\n var me = this;\r\n var state = me._selectList.state;\r\n if (isInverted) {\r\n return !_(state.notSelectedRecords).where({ Value: value }).length;\r\n } else {\r\n return !!_(state.selectedRecords).where({ Value: value }).length;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Дополнение списка объектов спец.значениями при открытии списка\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_beforeListOpen\r\n * @param {string} value проверяемое значение\r\n * @return {Boolean}\r\n */\r\n _beforeListOpen: function (selectList, byref_records) {\r\n var me = this;\r\n var isInverted = selectList.state.invertedMode; \r\n \r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.THIS_YEAR).makeSafeString(),\r\n value: SPECIAL_VALUE.THIS_YEAR,\r\n displayValue: L('CHOICE_THIS_YEAR'),\r\n type: SPECIAL_VALUE.THIS_YEAR,\r\n isSelected: me._isExist(SPECIAL_VALUE.THIS_YEAR, isInverted),\r\n classes: 'withBottomBorder'\r\n })\r\n\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.THIS_MONTH).makeSafeString(),\r\n value: SPECIAL_VALUE.THIS_MONTH,\r\n displayValue: L('CHOICE_THIS_MONTH'),\r\n type: SPECIAL_VALUE.THIS_MONTH,\r\n isSelected: me._isExist(SPECIAL_VALUE.THIS_MONTH, isInverted)\r\n });\r\n\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.THIS_WEEK).makeSafeString(),\r\n value: SPECIAL_VALUE.THIS_WEEK,\r\n displayValue: L('CHOICE_THIS_WEEK'),\r\n type: SPECIAL_VALUE.THIS_WEEK,\r\n isSelected: me._isExist(SPECIAL_VALUE.THIS_WEEK, isInverted)\r\n });\r\n\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.TOMORROW).makeSafeString(),\r\n value: SPECIAL_VALUE.TOMORROW,\r\n displayValue: L('CHOICE_TOMORROW'),\r\n type: SPECIAL_VALUE.TOMORROW,\r\n isSelected: me._isExist(SPECIAL_VALUE.TOMORROW, isInverted)\r\n });\r\n\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.TODAY).makeSafeString(),\r\n value: SPECIAL_VALUE.TODAY,\r\n displayValue: L('CHOICE_TODAY'),\r\n type: SPECIAL_VALUE.TODAY,\r\n isSelected: me._isExist(SPECIAL_VALUE.TODAY, isInverted)\r\n });\r\n\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.YESTERDAY).makeSafeString(),\r\n value: SPECIAL_VALUE.YESTERDAY,\r\n displayValue: L('CHOICE_YESTERDAY'),\r\n type: SPECIAL_VALUE.YESTERDAY,\r\n isSelected: me._isExist(SPECIAL_VALUE.YESTERDAY, isInverted)\r\n });\r\n \r\n return me;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins._controls.selectList);","(function checkboxPlugin(global) {\r\n \"use strict\";\r\n\r\n var SPECIAL_VALUE = global.SPECIAL_VALUE;\r\n var CONTROL_EVENT = global.SelectListControl.EVENT;\r\n\r\n /**\r\n * Плагин для добавления специальных значений \"Все\", \"Пустые\", \"Не пустые\" для поля с выпадающим списком\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя плагина. \r\n * @since 5.2.0.1300\r\n */\r\n global.SpecialValuesPlugin = WA.Plugin.extend({\r\n name: 'SpecialValuesPlugin',\r\n\r\n _selectList: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#register\r\n * @param {WebAccess.components.dataViews.gridPlugins._controls.selectList.SelectList} Расширяемый экземпляр\r\n * @since 5.2.0.1300\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (selectList) {\r\n var me = this;\r\n me._selectList = selectList\r\n .bind(CONTROL_EVENT.BEFORE_LIST_OPEN, $.proxy(me._beforeListOpen, me))\r\n .bind(CONTROL_EVENT.BEFORE_RECORDS_APPEND, $.proxy(me._beforeRecordsAppend, me))\r\n .bind(CONTROL_EVENT.ON_GET_VALUE, $.proxy(me._onGetValue, me))\r\n .bind(CONTROL_EVENT.ITEM_SELECT, $.proxy(me._onRecordSelect, me))\r\n return {};\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработка кликов по спец.значениям\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_onRecordSelect\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin}\r\n */\r\n _onRecordSelect: function (isChecked, value, display, type) {\r\n var me = this;\r\n if (type === SPECIAL_VALUE.ALL) {\r\n var jInp = me._selectList._jList.find('input[type=checkbox]');\r\n\r\n if (isChecked === true) {\r\n me._selectList.state.invertedMode = true;\r\n jInp.prop('checked', true);\r\n } else {\r\n me._selectList.state.invertedMode = false;\r\n jInp.prop('checked', false);\r\n } \r\n\r\n me._selectList.state.selectedRecords = [];\r\n me._selectList.state.notSelectedRecords = [];\r\n }\r\n\r\n if (type === SPECIAL_VALUE.BLANK || type === SPECIAL_VALUE.NOBLANK) {\r\n if (isChecked === true & (!me._isExist(value))) {\r\n if (!me._selectList.state.selectedRecords) me._selectList.state.selectedRecords = [];\r\n me._selectList.state.selectedRecords.push({\r\n Value: value,\r\n Type: type,\r\n Display: display\r\n }); \r\n }\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того что были выбраны все записи\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_onRecordSelect\r\n * @return {Boolean}\r\n */\r\n _isAllSelected: function () {\r\n var me = this; \r\n return me._selectList._jList.find('#' + SPECIAL_VALUE.ALL + '-list-option').is(':checked');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отметка чекбоксов при подзагрузке если была выбрана галочка ALL\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_beforeRecordsAppend\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin}\r\n */\r\n _beforeRecordsAppend: function (byref_records, selectList) {\r\n var me = this;\r\n if (me._isAllSelected()) {\r\n _(byref_records).each(function (record) { \r\n record.isSelected = true;\r\n //Если были записи исключенные из выборки когда нажималась кнопка \"Все\" надо при восстановлении снять выделение;\r\n if (_(selectList.state.notSelectedRecords).findIndex({ 'Value': record.value }) !== -1) {\r\n record.isSelected = false;\r\n }\r\n });\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверка наличия значения в списке объектов\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_isExist\r\n * @param {string} value проверяемое значение\r\n * @return {Boolean}\r\n */\r\n _isExist: function (value, isInverted) {\r\n var me = this;\r\n var state = me._selectList.state;\r\n if (isInverted) {\r\n return !_(state.notSelectedRecords).where({ Value: value }).length;\r\n } else {\r\n return !!_(state.selectedRecords).where({ Value: value }).length;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Дополнение списка объектов спец.значениями при открытии списка\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_beforeListOpen\r\n * @param {string} value проверяемое значение\r\n * @return {Boolean}\r\n */\r\n _beforeListOpen: function (selectList, byref_records) {\r\n var me = this;\r\n var emptyIndex;\r\n var isInverted = selectList.state.invertedMode;\r\n\r\n\r\n var emptyRecord = _(byref_records).find(function (record, index) { \r\n emptyIndex = index;\r\n return record.value === ''; \r\n });\r\n \r\n var hasEmptyRecords = (!$.isEmptyObject(emptyRecord)); \r\n\r\n if (hasEmptyRecords) {\r\n byref_records.splice(emptyIndex, 1)\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.NOBLANK).makeSafeString(),\r\n value: SPECIAL_VALUE.NOBLANK,\r\n displayValue: L('CHOICE_NONBLANK'),\r\n type: SPECIAL_VALUE.NOBLANK,\r\n isSelected: me._isExist(SPECIAL_VALUE.NOBLANK, isInverted),\r\n classes: 'withBottomBorder'\r\n });\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.BLANK).makeSafeString(),\r\n value: SPECIAL_VALUE.BLANK,\r\n displayValue: L('CHOICE_BLANK'),\r\n type: SPECIAL_VALUE.BLANK,\r\n isSelected: me._isExist(SPECIAL_VALUE.BLANK, isInverted)\r\n });\r\n };\r\n\r\n var classes = (!hasEmptyRecords) ? 'withBottomBorder' : '';\r\n byref_records.unshift({\r\n id: (\"\" + SPECIAL_VALUE.ALL).makeSafeString(),\r\n value: SPECIAL_VALUE.ALL,\r\n displayValue: L('CHOICE_ALL'),\r\n type: SPECIAL_VALUE.ALL,\r\n isSelected: isInverted,\r\n classes: classes\r\n }); //classes: 'withBottomBorder' \r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Если ALL то чистим фильтр и убираем многоточие\r\n * @private\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin#_onGetValue\r\n * @param {string} value проверяемое значение\r\n * @return {WebAccess.components.dataViews.gridPlugins._controls.selectList.SpecialValuesPlugin}\r\n */\r\n _onGetValue: function (selectList, byref_filter) { \r\n var me = this;\r\n\r\n //Уберем из фильтра запись ALL, иначе она поломает фильтрацию\r\n if (selectList.state.invertedMode === true) {\r\n selectList.state.notSelectedRecords = _.without(selectList.state.notSelectedRecords, _.findWhere(selectList.state.notSelectedRecords, {\r\n Value: SPECIAL_VALUE.ALL\r\n }));\r\n }\r\n\r\n if (byref_filter.Type === 'In') {\r\n if (_(byref_filter.In).where({ Value: SPECIAL_VALUE.ALL }).length) { \r\n if (_(selectList.state.notSelectedRecords).filter(function (record) { return record.Value !== SPECIAL_VALUE.ALL }).length > 0) {\r\n //значит снимали выделение хотя-бы от одной из всех выделенных записей\r\n selectList.state.invertedMode = true; \r\n } else {\r\n byref_filter.In = null;\r\n byref_filter.Type = 'Like';\r\n selectList.state.selectedRecords = [];\r\n selectList.state.notSelectedRecords = [];\r\n selectList._jInput.val('');\r\n selectList.state.invertedMode = false; \r\n } \r\n }\r\n\r\n var blankAndNoBlankItems = _(byref_filter.In).filter(function (i) {\r\n return i.Type === SPECIAL_VALUE.BLANK || i.Type === SPECIAL_VALUE.NOBLANK \r\n });\r\n\r\n if (blankAndNoBlankItems.length === 2) {\r\n byref_filter.In = _.chain(byref_filter.In)\r\n .map(function (i, index) {\r\n if (i.Type === SPECIAL_VALUE.BLANK || i.Type === SPECIAL_VALUE.NOBLANK) return null;\r\n return i;\r\n })\r\n .compact()\r\n .value();\r\n }\r\n\r\n }\r\n return me;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins._controls.selectList);","(function dateControlDefinition(global) {\r\n \"use strict\";\r\n\r\n // Шаблон.\r\n var TEMPLATE = '/formBuilder/date.compile.html';\r\n\r\n /**\r\n * Выбирает даты для фильтра в таблице.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins._controls.DateControl\r\n * @property {string} containerSelector Блок, содержащий выбор даты для фильтра в таблице. \r\n * @property {Object} defaults Настройки по умолчанию. \r\n * @since 5.2.0.1100\r\n */\r\n var DateControl = global.DateControl = BaseObject.extend({\r\n className: \"DateControl\",\r\n instanceID: null,\r\n containerSelector: '',\r\n state: {\r\n column: null,\r\n value: null\r\n },\r\n\r\n _jContainer: null,\r\n _jInput: null,\r\n\r\n init: function (containerSelector, defaults) {\r\n var me = this;\r\n me._super();\r\n me.state = {};\r\n $.extend(me.state, defaults);\r\n me.instanceID = generateUniqueID();\r\n me.containerSelector = containerSelector;\r\n me._jContainer = $(containerSelector);\r\n me._render();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отрисовка компоненты.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#_initControls\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _render: function () {\r\n var me = this;\r\n var template = WA.templates.render(TEMPLATE, {\r\n id: me.instanceID,\r\n 'class': 'dateControl',\r\n showTime: (me.state.column.dateType === 'DateTime')\r\n }).done(function (html) {\r\n me._jContainer.html(html);\r\n me._initControls();\r\n me._bindEvents();\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация контролов компоненты.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#_initControls\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _initControls: function () {\r\n var me = this;\r\n me._jInput = $('input.input', me.containerSelector);\r\n\r\n // Восстановление значения из состояния.\r\n me._fillInputValue();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навершивание событий на HTML-элементы компоненты.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#_bindEvents\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _bindEvents: function () {\r\n var me = this;\r\n me._jInput.on('change.dateControl', $.proxy(me._applyFilter, me));\r\n\r\n // По Enter дописываем все остальные части даты. Если ввесли только день, то дописываем месяц и год. Если ввели день и месяц, то дописываем год.\r\n me._jInput.on('keydown.dateControl', function (e) {\r\n var key = e.which || e.keyCode;\r\n if (key === 13) {\r\n var inp = me._jInput;\r\n var d = ParseDateTime(inp);\r\n inp.datepicker(\"setDate\", d);\r\n inp.data('selDate', d);\r\n inp.change();\r\n me.close();\r\n }\r\n });\r\n\r\n var isSet = me._jInput.data('isSetBeforeShowForOpenEvent');\r\n if (!isSet) {\r\n // Изменяем функцию события beforeShow, что бы вызвать наше событие open.\r\n var prevBeforeShow = me._jInput.datepicker('option', 'beforeShow');\r\n var newBeforeShow = function () {\r\n if (prevBeforeShow) prevBeforeShow();\r\n me.fire(DateControl.EVENT.OPEN, me);\r\n };\r\n me._jInput.datepicker('option', 'beforeShow', newBeforeShow);\r\n me._jInput.data('isSetBeforeShowForOpenEvent', true);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Применение выбранного значение и сохранение его в состоянии.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#_applyFilter\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _applyFilter: function () {\r\n var me = this;\r\n var displayValue = me._jInput.val();\r\n if (!!displayValue) {\r\n me.state.value = $.toJSON(parseDate(displayValue)).replaceAll('\"'); //$.toJSON возвращает дату в кавычнах, в данном случае они нам не нужны.\r\n } else {\r\n me.state.value = '';\r\n }\r\n me.fire(DateControl.EVENT.VALUE_CHANGED, me.getValue());\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновляет состояние поля.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#updateState\r\n * @since 5.2.0.1100\r\n */\r\n updateState: function (newState) {\r\n var me = this;\r\n $.extend(me.state, newState);\r\n me._fillInputValue();\r\n me.close();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Закрывает выпадающий список поля.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#close\r\n * @since 5.2.0.1100\r\n */\r\n close: function () {\r\n if (!this._jInput.length) return;\r\n try {\r\n this._jInput.datepicker('hide');\r\n } catch (e) {\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установка значения input из состояния.\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#_fillInputValue\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _fillInputValue: function () {\r\n var me = this;\r\n var value = '';\r\n if (!!me.state.value) {\r\n var formatFunc = (me.state.column.dateType === 'DateTime' ? formatDateTime : formatDate);\r\n value = formatFunc(Date.fromISO(me.state.value));\r\n }\r\n me._jInput.val(value);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значения поля.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins._controls.DateControl#getValue\r\n * @since 5.2.0.1100\r\n */\r\n getValue: function () {\r\n var me = this;\r\n var value = {\r\n 'Type': 'Equal',\r\n 'Like': '',\r\n 'In': null,\r\n 'Equal': me.state.value\r\n };\r\n\r\n me.fire(DateControl.EVENT.GET_VALUE, me, value);\r\n\r\n return value;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n }, {\r\n EVENT: {\r\n GET_VALUE: 'getValue',\r\n VALUE_CHANGED: 'change',\r\n OPEN: 'open'\r\n }\r\n });\r\n})(window.WA.components.dataViews.gridPlugins._controls);","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для компоненты slick-грида, для текстового реквизита\r\n * @see https://github.com/mleibman/SlickGrid/wiki/Writing-custom-cell-editors\r\n * @class WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @extends BaseObject\r\n * @since 5.2.0.1300 \r\n */\r\n global.StringEditor = BaseObject.extend({\r\n id: null,\r\n renderState: null,\r\n\r\n _jContainer: null,\r\n _jInput: null,\r\n _column: null,\r\n _row: null,\r\n _gridComp: null,\r\n\r\n _value: null,\r\n _displayValue: null,\r\n _data: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (args) {\r\n var me = this;\r\n\r\n ContextMenu.hideAll()\r\n\r\n me._super(args);\r\n me.renderState = $.Deferred();\r\n me.id = generateUniqueID();\r\n me._gridComp = args.grid;\r\n me._column = args.column;\r\n me._row = args.item;\r\n\r\n\r\n me.commit = args.commitChanges;\r\n me._value = me._row[me._column.id];\r\n // Чтобы 0 был нулём, а не пустым значением.\r\n if (me._value === null || _.isUndefined(me._value)) {\r\n me._value = '';\r\n }\r\n me._displayValue = me._row[me._column.field];\r\n if (me._displayValue === null || _.isUndefined(me._displayValue)) {\r\n me._displayValue = '';\r\n }\r\n\r\n me._jContainer = $(args.container);\r\n me._data = $.extend({}, me._column.requisite); //Копируем метаинформацию реквизита, т.к. копируется ссылка и изменение полей _data приводит к изменению _column.requisite, что нежелательно (#111079).\r\n\r\n me.render().done(function () {\r\n me._getWrapper().bind('change', function (e, i, values) {\r\n var last = me._value;\r\n var current = values.value;\r\n\r\n last = (last === null) ? \"\" : last;\r\n current = (current === null) ? \"\" : current;\r\n\r\n if (me.type === 'float' || me.type === 'integer') {\r\n last = +last;\r\n current = +current;\r\n } else {\r\n last = \"\" + last;\r\n current = \"\" + current;\r\n }\r\n\r\n if (last != current) {\r\n me._updateData(me._row, values);\r\n };\r\n });\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отрисовка реквизита, при активации редактора на ячейке грида\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#render\r\n * @since 5.2.0.1300 \r\n */\r\n render: function () {\r\n var me = this;\r\n\r\n var t = Hogan.compile('
    ');//FIXME: понятно же не так\r\n me._jContainer.html(t.render({\r\n id: me.id,\r\n value: me._getValueForRender()\r\n }));\r\n\r\n me._jInput = $('#' + me.id);\r\n\r\n // Для планшетов и сматфонов отключаем клавиатурную навигацию.\r\n if (!WA.ENV.isTouch()) {\r\n me.initKeyNavigation();\r\n }\r\n\r\n return me.renderState.resolve();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значение реквизита для рендеринга редактора.\r\n * @private\r\n */\r\n _getValueForRender: function () {\r\n return this._displayValue;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Инициализация событий отвечающих за клавиатурную навигацию по ячейке\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#initKeyNavigation\r\n * @since 5.2.0.1300 \r\n */\r\n initKeyNavigation: function () {\r\n var me = this;\r\n var attempts = 0;\r\n var lastKey = null;\r\n\r\n // функция для читабельности кода\r\n var leaveOut = function (e) { };\r\n\r\n // функция для читабельности кода\r\n var stayHere = function (e) { e.stopImmediatePropagation(); };\r\n\r\n var isAllTextSelected = function (jInput) {\r\n var range = jInput.range();\r\n return (range.end - range.start === range.length && range.length);\r\n };\r\n\r\n var hasText = function (jInput) {\r\n return !!jInput.val();\r\n };\r\n\r\n me._jInput.bind(\"keydown.nav\", function (e) {\r\n var key = e.keyCode;\r\n var jInput = $(this);\r\n var c = $.ui.keyCode;\r\n\r\n if (key === c.ENTER) {\r\n var _isAllTextSelected = isAllTextSelected(jInput);\r\n setTimeout(function () { // что бы дробное число выделялось при нажатии на Enter.\r\n if (_isAllTextSelected) {\r\n jInput.caret(0);\r\n } else {\r\n jInput.focus().select();\r\n }\r\n }, 100);\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n if (key === c.ESCAPE) {\r\n jInput.focus().select();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n if (key === c.DOWN || key === c.UP) {\r\n me._handleUpDownKey(e);\r\n }\r\n\r\n if ((key === c.LEFT || key === c.RIGHT) && !e.shiftKey && !e.altKey && !e.metaKey && !e.ctrlKey) {\r\n if (isAllTextSelected(jInput) || !hasText(jInput)) {\r\n leaveOut(e);\r\n } else {\r\n if (jInput.caret() === jInput.val().length && key === c.RIGHT) {\r\n return leaveOut(e);\r\n }\r\n if (jInput.caret() === 0 && key === c.LEFT) {\r\n return leaveOut(e);\r\n }\r\n stayHere(e);\r\n }\r\n }\r\n }).focus();\r\n\r\n setTimeout(function () { // Без setTimeout не выделяется дробное число из-за плагина autoNumeric\r\n me._jInput.range(0, me._jInput.val().length); //Выделить текст\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _handleUpDownKey: function (e) {\r\n var key = e.keyCode;\r\n var c = $.ui.keyCode;\r\n\r\n if (key === c.DOWN) {\r\n // чтобы не добавлялось бесконечное число строк при нажатии вниз(изза \r\n // change, который срабатывает в focusout) \r\n this._jInput.off('focusout.autoNumeric').blur();\r\n } else {\r\n // чтобы не удалялась добавленная строка со значением\r\n this._jInput.blur();\r\n }\r\n\r\n //Чтобы не скролился документ\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Установить фокус на поле ввода\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#focus\r\n * @since 5.2.0.1300 \r\n */\r\n focus: function () {\r\n this._jInput.focus();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить объект-обертку над контролом реквизита, с необходимыми методами типа getValue;\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#_getWrapper\r\n */\r\n _getWrapper: function () {\r\n var me = this;\r\n if (!!me._wrapper) return me._wrapper;\r\n\r\n var parentCurrent = {\r\n _current: me._gridComp._parent.settings.current\r\n };\r\n\r\n var data = {\r\n controls: [me.id],\r\n displayValue: \"\",\r\n isRequired: false,\r\n isVisible: true,\r\n isReadOnly: false,\r\n value: \"\",\r\n row_id: me._row.id,\r\n sectionNumber: me._gridComp._parent.settings.sectionNumber,\r\n hasCalculation: me._column.hasCalculation\r\n };\r\n\r\n return me._wrapper = new WA.CMP.wrappers.form.requisites.Text(me._column.id, data, parentCurrent.form);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того что значение в ячейке изменилось\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#isValueChanged\r\n * @since 5.2.0.1300 \r\n */\r\n isValueChanged: function () {\r\n var me = this;\r\n var newValue = me.serializeValue();\r\n\r\n if (newValue.value != me._value) {\r\n me._value = newValue.value;\r\n return true;\r\n }\r\n return false;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Применить существующее значение к гриду\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#applyValue\r\n * @since 5.2.0.1300 \r\n */\r\n applyValue: function (row, newData) {\r\n var me = this;\r\n\r\n me._updateData(row, newData);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _updateData: function (row, newData) {\r\n var me = this;\r\n row[me._column.id] = newData.value;\r\n row[me._column.field] = newData.displayValue;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @stub\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#loadValue\r\n * @since 5.2.0.1300 \r\n */\r\n loadValue: function () {\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение значение из реквизита\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#serializeValue\r\n * @since 5.2.0.1300 \r\n */\r\n serializeValue: function () {\r\n var me = this;\r\n var control = me._getWrapper();\r\n var value = control.getValue();\r\n return { value: value, displayValue: value };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @stub\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#validate\r\n * @since 5.2.0.1300 \r\n */\r\n validate: function () {\r\n return { valid: true, msg: null };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#destroy\r\n * @since 5.2.0.1300 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n me._updateData(me._row, me.serializeValue());\r\n me._jContainer.empty();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#disable\r\n * @since 5.2.0.1300 \r\n */\r\n disable: function () {\r\n this._getWrapper().disable();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#enable\r\n * @since 5.2.0.1300 \r\n */\r\n enable: function () {\r\n this._getWrapper().enable();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n setCustomAction: function (callback, opt_tooltip) {\r\n this._getWrapper().setCustomAction(callback, opt_tooltip);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить связанную с текущим реквизитом колонку.\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#_getColumn\r\n * @private\r\n * @since 5.5.0.2703\r\n * @return {object} Колонка, связанная с реквизитом строки детального раздела.\r\n */\n _getColumn: function () {\r\n var me = this;\n var currentTable = me._gridComp._parent.getTable();\r\n return currentTable.columns[me._column.id];\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для компоненты slick-грида, для реквизита типа \"Многострочный текст\"\r\n * @class WebAccess.components.dataViews.gridPlugins._editors.FloatEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @since 5.2.0.1300 \r\n */\r\n global.TextEditor = global.StringEditor.extend({});\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для ячейки с реквизитом типа pick. \r\n * @class WebAccess.components.dataViews.gridPlugins._editors.PickEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @since 5.2.0.1300\r\n */\r\n global.PickEditor = global.StringEditor.extend({\r\n _renderer: null,\r\n _wrapper: null,\r\n\r\n init: function (args) {\r\n var me = this;\r\n me._super(args);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Рендеринг и добавление контрола реквизита в ячейку грида\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.PickEditor#render\r\n */\r\n render: function () {\r\n var me = this;\r\n\r\n\r\n me._data.id = me.id;\r\n \r\n me._data.selectedKey = me._value;\r\n me._data.selectedValue = me._displayValue;\r\n\r\n me._renderer = new WebAccess.components.forms.requisites.Pick();\r\n\r\n me._renderer.renderAsync(me._data).done(function (html) {\r\n me._jContainer.html('
    ' + html + '
    ');\r\n me._jContainer.find('input.input').addClass('noBorder');\r\n \r\n me._jInput = $('#' + me.id);\r\n me.initKeyNavigation();\r\n me.renderState.resolve();\r\n });\r\n return me.renderState\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n initKeyNavigation: function() {\r\n this._super();\r\n\r\n this._jInput.bind(\"keydown.nav\", function (e) {\r\n var key = e.keyCode;\r\n var c = $.ui.keyCode;\r\n\r\n if ((key === c.DOWN || key === c.UP) && e.altKey) {\r\n e.stopImmediatePropagation();\r\n };\r\n }) \r\n },\r\n\r\n _handleUpDownKey: function () {\r\n //не вызываем родительский метод, чтобы не поломать ALT+вниз\r\n },\r\n\r\n /**\r\n * Получить объект-обертку над контролом реквизита, с необходимыми методами типа getValue;\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.PickEditor#_getWrapper\r\n */\r\n _getWrapper: function () {\r\n var me = this;\r\n if (!!me._wrapper) return me._wrapper;\r\n var parentCurrent = me._gridComp._parent.settings.current;\r\n return me._wrapper = new WA.CMP.wrappers.form.requisites.Pick(me._column.id, me.id, parentCurrent.form);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того что значение ячейки изменилось\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.PickEditor#isValueChanged\r\n */\r\n isValueChanged: function () {\r\n var me = this;\r\n var values = me.serializeValue();\r\n \r\n if (me._value !== values.value) {\r\n me._value = values.value;\r\n return true;\r\n }\r\n return false\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.PickEditor#destroy\r\n * @since 5.2.0.1300 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n me._jInput.HidePickContainer();\r\n me._super();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Метод вызывается когда значение в ячейке изменилось, и передает данные из\r\n * редактора в набор данных грида.\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.PickEditor#serializeValue\r\n */\r\n serializeValue: function () {\r\n var me = this; \r\n var control = me._getWrapper(); \r\n return {\r\n 'value': control.getValue(),\r\n 'displayValue': control.getDisplayValue()\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n clearValues: function () {\r\n var wrapper = this._getWrapper();\r\n wrapper.clearValues.apply(wrapper, arguments);\r\n },\r\n\r\n addValue: function () {\r\n var wrapper = this._getWrapper();\r\n wrapper.addValue.apply(wrapper, arguments);\r\n },\r\n\r\n \r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n var TEMPLATE = 'formBuilder/date.compile.html';\r\n\r\n /**\r\n * Редактор для компоненты slick-грида, для реквизита типа \"Дата\"\r\n * @class WebAccess.components.dataViews.gridPlugins._editors.DateEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @since 5.2.0.1300\r\n */\r\n global.DateEditor = global.StringEditor.extend({\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отрисовка реквизита, при активации редактора на ячейке грида\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#render\r\n * @since 5.2.0.1300 \r\n */\r\n render: function () {\r\n var me = this;\r\n\r\n var data = {};\r\n data.showTime = (me._column.dateType === 'DateTime');\r\n data.id = me.id;\r\n\r\n if (typeof me._value === \"object\") {\r\n data.value = formatDate(me._value);\r\n } else {\r\n data.value = me._displayValue;\r\n };\r\n \r\n WA.templates.render(TEMPLATE, data).done(function (html) {\r\n me._jContainer.html('
    ' + html + '
    ');\r\n me._jContainer.find('input.input').addClass('noBorder');\r\n me._jInput = $('#' + me.id);\r\n\r\n me.initPicker();\r\n\r\n // Для планшетов и сматфонов отключаем клавиатурную навигацию.\r\n if (!WA.ENV.isTouch()) {\r\n me.initKeyNavigation();\r\n }\r\n\r\n me.renderState.resolve();\r\n });\r\n\r\n return me.renderState.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включить дополнение по Enter\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#initPicker \r\n */\r\n initPicker: function () {\r\n var me = this;\r\n\r\n var isAllTextSelected = function (jInput) {\r\n var range = jInput.range();\r\n if (range.end - range.start === range.length && range.length) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n var hasText = function (jInput) {\r\n return !!jInput.val();\r\n }\r\n\r\n // По Enter дописываем все остальные части даты. Если ввесли только день, то дописываем месяц и год. Если ввели день и месяц, то дописываем год.\r\n me._jInput.on('keydown.dateControl', function (e) {\r\n var inp = me._jInput;\r\n var c = $.ui.keyCode;\r\n\r\n var key = e.which || e.keyCode;\r\n\r\n function adjustDate() {\r\n var d = ParseDateTime(inp);\r\n inp.datepicker(\"setDate\", d);\r\n inp.data('selDate', d);\r\n //Шамов А.: Убрал потому, что \"ставлю курсор в поле Дата, по стрелке вправо перехожу к другому полю и по стрелке вниз добавляю вторую пустую строку\" - \r\n // способом можно добавить бесконечное количество пустых строк (#103514).\r\n //inp.trigger('change');\r\n me.close();\r\n }\r\n\r\n //ENTER\r\n if (key === 13) {\r\n if (!isAllTextSelected(inp) && hasText(inp)) {\r\n adjustDate();\r\n }\r\n }\r\n\r\n //LEFT or RIGHT\r\n if (key === c.LEFT || e.keyCode === c.RIGHT) {\r\n if (inp.caret() === inp.val().length && key === c.RIGHT) {\r\n return adjustDate();\r\n }\r\n if (inp.caret() === 0 && key === c.LEFT) {\r\n return adjustDate();\r\n }\r\n }\r\n\r\n //DOWN or UP\r\n if (key === c.DOWN || key === c.UP) {\r\n return adjustDate();\r\n }\r\n\r\n // CTRL+;\r\n if ((key === 59 || key === 186) && e.ctrlKey) {\r\n var now = new Date();\r\n inp.datepicker(\"setDate\", now);\r\n inp.data('selDate', now);\r\n inp.trigger('change');\r\n me.close();\r\n }\r\n\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Закрыть окно выбора-даты\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#close \r\n */\r\n close: function () {\r\n if (!this._jInput.length) return;\r\n try {\r\n this._jInput.datepicker('hide');\r\n } catch (e) {\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение значение из реквизита\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#serializeValue\r\n * @since 5.2.0.1300 \r\n */\r\n serializeValue: function () {\r\n var me = this;\r\n var control = me._getWrapper();\r\n var value = control.getValue();\r\n return { value: value, displayValue: value };\r\n },\r\n\r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#destroy\r\n * @since 5.2.0.1300 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n me.close();\r\n me._super();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить объект-обертку над контролом реквизита, с необходимыми методами типа getValue;\r\n * @since 5.2.0.1300\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.DateEditor#_getWrapper\r\n */\r\n _getWrapper: function () {\r\n var me = this;\r\n if (!!me._wrapper) return me._wrapper;\r\n var parentCurrent = me._gridComp._parent.settings.current;\r\n return me._wrapper = new WA.CMP.wrappers.form.requisites.Date(me._column.id, me.id, parentCurrent.form);\r\n }\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\n(function (global) {\n\n /**\n * Редактор для компоненты slick-грида, для реквизита типа \"Целое число\"\n * @class WebAccess.components.dataViews.gridPlugins._editors.IntegerEditor\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\n * @since 5.2.0.1300 \n */\n global.IntegerEditor = global.StringEditor.extend({\r\n init: function (args) {\r\n var me = this;\n me.type = 'integer';\n me._super(args);\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Отрисовка реквизита, при активации редактора на ячейке грида\n * @method WebAccess.components.dataViews.gridPlugins._editors.FloatEditor#render\n * @since 5.2.0.1300 \n */\n render: function () {\r\n var me = this;\n me._super();\n var currentColumn = me._getColumn();\n if (!currentColumn.isDisabled()) {\r\n var opt = $.extend({}, $.fn.autoNumeric.defaults, { mDec: '0', aPad: false });\n me._jInput.autoNumeric('init', opt);\r\n }\r\n return me.renderState;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Получает значение реквизита для рендеринга редактора.\n * @private\n */\n _getValueForRender: function () {\r\n return this._value;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Получение значение из реквизита\n * @method WebAccess.components.dataViews.gridPlugins._editors.FloatEditor#serializeValue\n * @since 5.2.0.1300 \n */\n serializeValue: function () {\r\n var me = this;\n var currentColumn = me._getColumn();\n var control = me._getWrapper();\n var value = control.getValue();\n if (!currentColumn.isDisabled()) {\n //Шамов А.: Что бы сработало форматирование дробного числа в плагине autoNumeric.\n me._jInput.autoNumeric('format');\r\n }\n return { value: value, displayValue: me._jInput.val() };\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.IntegerEditor#destroy\r\n * @since 5.2.0.9100 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n var autoNumeric = me._jInput.data('autoNumeric');\r\n if (typeof autoNumeric === 'object') {\r\n // Для того, чтобы обязательно отработал focusout\r\n // у контрола, установив значение в реквизит\r\n me._jInput.trigger('focusout.autoNumeric');\r\n }\r\n me._super();\r\n }\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n });\r\n\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n\r\n /**\r\n * Редактор для компоненты slick-грида, для реквизита типа \"Дробное число\"\r\n * @class WebAccess.components.dataViews.gridPlugins._editors.FloatEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @since 5.2.0.1300 \r\n */\r\n global.FloatEditor = global.StringEditor.extend({\r\n init: function (args) {\r\n var me = this;\r\n me.type = 'float';\r\n me._super(args);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отрисовка реквизита, при активации редактора на ячейке грида\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.FloatEditor#render\r\n * @since 5.2.0.1300 \r\n */\r\n render: function () {\r\n var me = this;\r\n me._super();\r\n var currentColumn = me._getColumn();\r\n if (!currentColumn.isDisabled()) {\r\n var opt = $.extend({}, $.fn.autoNumeric.defaults);\r\n if (me._column.precision) {\r\n opt = { mDec: '' + me._column.precision, aPad: true }\r\n }\r\n me._jInput.autoNumeric('init', opt);\r\n }\r\n return me.renderState;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значение реквизита для рендеринга редактора.\r\n * @private\r\n */\r\n _getValueForRender: function () {\r\n return this._value;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение значение из реквизита\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.FloatEditor#serializeValue\r\n * @since 5.2.0.1300 \r\n */\r\n serializeValue: function () {\r\n var me = this;\n var currentColumn = me._getColumn();\r\n var control = me._getWrapper();\r\n var value = control.getValue();\r\n if (!currentColumn.isDisabled()) {\r\n //Шамов А.: Что бы сработало форматирование дробного числа в плагине autoNumeric.\r\n me._jInput.autoNumeric('format');\r\n }\r\n return { value: value, displayValue: me._jInput.val() };\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.IntegerEditor#destroy\r\n * @since 5.2.0.9100 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n var autoNumeric = me._jInput.data('autoNumeric');\r\n if (typeof autoNumeric === 'object') {\r\n // Для того, чтобы обязательно отработал focusout\r\n // у контрола, установив значение в реквизит\r\n me._jInput.trigger('focusout.autoNumeric');\r\n }\r\n me._super();\r\n }\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для ячейки с реквизитом \"Ссылка на документ\". \r\n * @class WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.StringEditor\r\n * @since 5.5.0.1000\r\n */\r\n global.BaseObjectSelectEditor = global.StringEditor.extend({\r\n _renderer: null,\r\n _wrapper: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (args) {\r\n var me = this;\r\n me._super(args);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Рендеринг и добавление контрола реквизита в ячейку грида\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#render\r\n */\r\n render: function () {\r\n var me = this;\r\n\r\n me._data.id = me.id,\r\n me._data.defaultValue = me._displayValue;\r\n me._data.hiddenInputValue = me._value; //если выбор множествeнный то тут должны быть перечисления id через \";\"\r\n me._data.selectedRecordID = me._value;\r\n\r\n //Для отключения старой логики работы ведущих/ведомых. Новая находится в Core.cards.initLeaderDrivenLogic.\r\n me._data.leaderRequisites = '[]';\r\n me._data.drivenRequisites = '[]';\r\n\r\n // Означиваем номер строки детально раздела в контексте вызова. Тут а не в конструкторе, т.к. в базовом в конструкторе вызывается render.\r\n var settings = $.parseJSON(me._data.settings);\r\n\r\n // Устанавливаемость признак что значение есть, т.к. для детального раздела он из вне передается некорректный.\r\n settings.selected = ('' + me._data.selectedRecordID) !== '';\r\n\r\n var queryContext = $.parseJSON(settings.queryContext);\r\n if (queryContext) {\r\n queryContext.detailRecordId = +me._row.id;\r\n settings.queryContext = $.toJSON(queryContext);\r\n }\r\n me._data.settings = $.toJSON(settings);\r\n\r\n me._renderer = me._createRenderer();\r\n if (me._renderer) {\r\n me._renderer.renderAsync(me._data).done(function (html) {\r\n me._jContainer.html('
    ' + html + '
    ');\r\n me._jContainer.find('input.input').addClass('noBorder');\r\n\r\n me._getWrapper().bind('change', function (e, i, values) {\r\n me._updateData(me._row, values);\r\n });\r\n\r\n me._jInput = $('#' + me.id);\r\n\r\n // Для планшетов и сматфонов отключаем клавиатурную навигацию.\r\n if (!WA.ENV.isTouch()) {\r\n me.initKeyNavigation();\r\n }\r\n\r\n me.renderState.resolve();\r\n });\r\n } else {\r\n me.renderState.reject();\r\n }\r\n return me.renderState;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает рендерер.\r\n * @private\r\n */\r\n _createRenderer: function () {\r\n return null;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация событий отвечающих за клавиатурную навигацию по ячейке\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.StringEditor#initKeyNavigation\r\n * @since 5.5.0.1000 \r\n */\r\n initKeyNavigation: function () {\r\n var me = this;\r\n var c = $.ui.keyCode;\r\n var jEditContainer = me._jContainer.find('.editor');\r\n\r\n var isAllTextSelected = function (jInput) { return me.isFocused(); }\r\n var hasText = function (jInput) { return !!jInput.val(); }\r\n var hasNoValue = function () { return !me._getWrapper().getValue() }\r\n var leaveOut = function (e) { };\r\n var stayHere = function (e) { e.stopImmediatePropagation(); }\r\n var disableSlickOnEnter = function (e) { e.stopImmediatePropagation(); }\r\n\r\n var passKeyToInput = function (key) {\r\n var press = jQuery.Event(\"keydown\");\r\n press.ctrlKey = false;\r\n press.which = key;\r\n me._jInput.trigger(press);\r\n }\r\n\r\n var selectAllText = function () {\r\n me._jInput.blur();\r\n me.focus();\r\n jEditContainer.focus();\r\n }\r\n\r\n var focusToInput = function () {\r\n me.unFocus();\r\n me._jInput.focus();\r\n }\r\n\r\n //При нажатии на enter переводим фокус на инпут\r\n jEditContainer.on(\"keydown.nav\", function (e) {\r\n var key = e.which\r\n if (key === c.ENTER) {\r\n if (isAllTextSelected() || hasNoValue()) {\r\n focusToInput();\r\n disableSlickOnEnter(e);\r\n }\r\n }\r\n })\r\n\r\n //Если выделен весь текст, то при вводе пробрасываем событие в инпут и фокус тоже\r\n jEditContainer.on(\"keydown.nav\", function (e) {\r\n\r\n if (!isAllTextSelected()) return;\r\n var key = e.which\r\n if (key === c.BACKSPACE || key === c.DELETE) {\r\n if (!me._getWrapper().isDisabled()) {\r\n me._getWrapper().clear(true);\r\n }\r\n }\r\n\r\n var ignoredKeys = [c.LEFT, c.RIGHT, c.DOWN, c.CONTROL, c.UP, c.TAB, c.ESCAPE, c.SHIFT, c.PAGE_UP, c.PAGE_DOWN, c.END, c.CAPS_LOCK, c.ENTER];\r\n if (ignoredKeys.indexOf(key) === -1 && !e.shiftKey && !e.metaKey && !e.ctrlKey) {\r\n\r\n //чтобы при нажатии на alt+down поле не очищалось а работала выпадайка вниз\r\n if (!e.altKey && !me._getWrapper().isDisabled()) {\r\n me._getWrapper().clear();\r\n }\r\n\r\n focusToInput();\r\n passKeyToInput(key);\r\n }\r\n }).focus().select();\r\n\r\n //Если нажимаем на enter находясь в инпуте - убираем фокус с него и выделяем весь текст\r\n me._jInput.bind(\"keydown.nav\", function (e) {\r\n var key = e.which;\r\n if (key === c.ENTER) {\r\n selectAllText();\r\n disableSlickOnEnter(e);\r\n }\r\n\r\n if (e.keyCode === c.LEFT || e.keyCode === c.RIGHT) {\r\n //if (hasNoValue()) {\r\n leaveOut(e);\r\n /*} else {\r\n stayHere(e);\r\n } */\r\n }\r\n });\r\n\r\n //При клике в инпут, надо снимать выделение с текста\r\n me._jInput.on('focus.nav', function () {\r\n me.unFocus();\r\n });\r\n\r\n //Инициализация фокуса\r\n if (hasNoValue()) {\r\n focusToInput();\r\n } else {\r\n selectAllText();\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить фокус на поле ввода(а если честно, то на спан с текстом)\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#focus\r\n * @since 5.5.0.1000 \r\n */\r\n focus: function () {\r\n this._getSelectedItemElements().addClass('selectedText');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n isFocused: function () {\r\n return this._getSelectedItemElements().hasClass('selectedText');\r\n },\r\n\r\n /**\r\n * Получить объект-обертку над контролом реквизита, с необходимыми методами типа getValue\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#unFocus\r\n */\r\n unFocus: function () {\r\n this._getSelectedItemElements().removeClass('selectedText');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает выбранные элементы.\r\n * @since 5.5.0.1000\r\n * @private\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#_getSelectedItemElements\r\n */\r\n _getSelectedItemElements: function () {\r\n return this._jContainer.find('.rs_SelItems span');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить объект-обертку над контролом реквизита, с необходимыми методами типа getValue\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#_getWrapper\r\n * @private\r\n */\r\n _getWrapper: function () {\r\n var me = this;\r\n if (!!me._wrapper) return me._wrapper;\r\n var parentCurrent = me._gridComp._parent.settings.current;\r\n return me._wrapper = me._createWrapper(parentCurrent);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает объект-обертку над контролом реквизита, с необходимыми методами типа getValue\r\n * @private\r\n */\r\n _createWrapper: function (parentCurrent) {\r\n return null;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того что значение ячейки изменилось\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#isValueChanged\r\n */\r\n isValueChanged: function () {\r\n var me = this;\r\n var values = me.serializeValue();\r\n //if (!me._value) me._value = null; //Шамов А.: Убрал, что бы осталась совместимость метода getValue, который должен вернуть пустую строку.\r\n\r\n\r\n if (me._value != values.value) {\r\n me._value = values.value;\r\n return true;\r\n }\r\n return false\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Метод вызывается когда значение в ячейке изменилось, и передает данные из\r\n * редактора в набор данных грида.\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#applyValue\r\n */\r\n applyValue: function (row, newData) {\r\n var me = this;\r\n me._updateData(row, newData);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Метод вызывается когда значение в ячейке изменилось, и передает данные из\r\n * редактора в набор данных грида.\r\n * @since 5.5.0.1000\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#serializeValue\r\n */\r\n serializeValue: function () {\r\n\r\n var me = this;\r\n var control = me._getWrapper();\r\n\r\n return {\r\n 'value': control.getValue(),\r\n 'displayValue': control.getDisplayValue()\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Очистка поля\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor#destroy\r\n * @since 5.5.0.1000 \r\n */\r\n destroy: function () {\r\n var me = this;\r\n if ($('.rs_container').is(':visible').length) {\r\n me._jInput.HideContainer();\r\n }\r\n me._super();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для ячейки с реквизитом множественного выбора. \r\n * @class WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor\r\n * @since 5.2.0.1300\r\n */\r\n global.ReferenceEditor = global.BaseObjectSelectEditor.extend({\r\n _renderer: null,\r\n _wrapper: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает рендерер.\r\n * @private\r\n */\r\n _createRenderer: function () {\r\n return new WebAccess.components.forms.requisites.ReferenceSelect();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает объект-обертку над контролом реквизита, с необходимыми методами типа getValue\r\n * @private\r\n */\r\n _createWrapper: function (parentCurrent) {\r\n var me = this;\r\n return new WA.CMP.wrappers.form.requisites.Reference(me._column.id, me.id, parentCurrent.form);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n setReferences: function (references) {\r\n this._getWrapper().setReferences(references);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n setFilter: function (filter, opt_refCode) {\r\n this._getWrapper().setFilter(filter, opt_refCode);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n setValues: function (filter, opt_refCode) {\r\n this._getWrapper().setValues(filter, opt_refCode);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n setMainReference: function (referenceName) {\r\n this._getWrapper().setMainReference(referenceName);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n addLastObjectsPseudoReference: function (lastReferences) {\r\n this._getWrapper().addLastObjectsPseudoReference(lastReferences);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проброшенный метод из клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#setCustomAction\r\n * @since 5.2.0.1300 \r\n */\r\n removeLastObjectsPseudoReference: function (lastReferences) {\r\n this._getWrapper().removeLastObjectsPseudoReference(lastReferences);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Привязка вызова справочника в модальном окне по клику на иконке в поле ввода.\r\n * @method WebAccess.components.dataViews.gridPlugins._editors.ReferenceEditor#bindReferenceGridDialog\r\n * @since 5.4.0.1012 \r\n */\r\n bindReferenceGridDialog: function () {\r\n this._getWrapper().bindReferenceGridDialog();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Редактор для ячейки с реквизитом \"Ссылка на документ\". \r\n * @class WebAccess.components.dataViews.gridPlugins._editors.DocumentEditor\r\n * @extends WebAccess.components.dataViews.gridPlugins._editors.BaseObjectSelectEditor\r\n * @since 5.5.0.1000\r\n */\r\n global.DocumentEditor = global.BaseObjectSelectEditor.extend({\r\n _renderer: null,\r\n _wrapper: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает рендерер.\r\n */\r\n _createRenderer: function () {\r\n return new WebAccess.components.forms.requisites.DocumentSelect();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает объект-обертку над контролом реквизита, с необходимыми методами типа getValue\r\n */\r\n _createWrapper: function (parentCurrent) {\r\n var me = this;\r\n return new WA.CMP.wrappers.form.requisites.Document(me._column.id, me.id, parentCurrent.form);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n})(window.WA.components.dataViews.gridPlugins._editors)","\"use strict\";\r\n(function sortingPlugin(global) {\r\n\r\n /**\r\n * Плагин для сохранения и загрузки сортировки в таблице.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.SortingPlugin\r\n * @extends WebAccess.Plugin\r\n * @since 5.2.0.1100\r\n */\r\n global.SortingPlugin = WA.Plugin.extend({\r\n name: 'SortingPlugin',\r\n\r\n // Расширяемый грид\r\n _grid: null,\r\n _useServer: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (useServer) {\r\n this._useServer = useServer;\r\n },\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.SortingPlugin#register\r\n * @param {grid} Таблица.\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._grid = grid;\r\n\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.BEFORE_GRID_INIT, me._onGridBeforeInit, me);\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.COLUMN_INIT, $.proxy(me._onColumnInit, me));\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, $.proxy(me._onGridInit, me));\r\n return {\r\n 'reSortColumns': me._reSort\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Хэндлер события до инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.EditPlugin#_onGridBeforeInit\r\n * @param {string} containerSelector селектор контейнера для грида.\r\n * @param {Object} dataView представление данных.\r\n * @param {Object} columns описания всех колонок.\r\n * @param {Object} settings настройки грида.\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridBeforeInit: function (containerSelector, dataView, columns, byref_settings) {\r\n var me = this;\r\n if (!me._useServer) {\r\n // byref_settings.multiColumnSort = true;\r\n };\r\n },\r\n\r\n /**\r\n * Делаем все колонки сортируемыми\r\n * @method WebAccess.components.dataViews.gridPlugins.CheckboxPlugin#_onColumnInit\r\n * @param {object} byref_column колонка\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onColumnInit: function (byref_column) {\r\n var isSpecialColumn = (byref_column.id.charAt(0) === '_');\r\n byref_column.sortable = !isSpecialColumn;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Хэндлер события инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.SortingPlugin#onGridInit\r\n * @param {SlickGrid} slickGrid копмопнента грид.\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridInit: function (slickGrid) {\r\n this._bindOnSort();\r\n this._restoreSorting();\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Восстанавливает сохраненную сортировку при инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.SortingPlugin#_restoreSorting \r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _restoreSorting: function () {\r\n var me = this;\r\n if (!me._useServer) {\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, function () {\r\n me._grid.reSortColumns();\r\n });\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пересортировка\r\n * @method WebAccess.components.dataViews.gridPlugins.SortingPlugin#_restoreSorting \r\n * @private\r\n * @since 5.2.0.1304\r\n */\r\n _reSort: function () {\r\n var grid = this;\r\n var me = this; \r\n var sortingColumns = _(grid.state.Sort).map(function (sortInfo) {\r\n return {\r\n columnId: sortInfo.Name,\r\n sortAsc: sortInfo.IsAsc\r\n };\r\n });\r\n\r\n grid.grid.setSortColumns(sortingColumns);\r\n\r\n _(sortingColumns).each(function (_column) {\r\n var column = _(grid._columns).findWhere({ id: _column.columnId });\r\n if (!column) return;\r\n\r\n var comparer = function (g1, g2) {\r\n var v1 = g1[column.field];\r\n var v2 = g2[column.field];\r\n var type = requisiteTypeToString(column.type);\r\n // Дробные и целые числа могут быть записаны в формате \"1 234 567,34\". Такая запись не конвертируется в число, поэтому берем значение без форматирования.\r\n if (type === 'float' || type === 'integer' || type === 'largeinteger') {\r\n v1 = g1[column.id];\r\n v2 = g2[column.id];\r\n }\r\n \r\n return WA.utils.compareData(v1, v2, type);\r\n };\r\n\r\n grid.grid.setSortColumn(_column.columnId, _column.sortAsc);\r\n grid.dataView.sort(comparer, _column.sortAsc);\r\n });\r\n\r\n //проверяем была ли добавлена новая строка в таблицу, добавленной строке устанавливаем ранг - 1000000\r\n if (grid._table && WA.ENV.browser.name !== 'IE') {\r\n var rowsArr = grid._table.rows.toArray();\r\n for (var i = 0; i < rowsArr.length; i++) {\r\n var row = rowsArr[i];\r\n if (row._isNew) {\r\n var rowData = grid.dataView.getItemById(row.id);\r\n if (rowData) {\r\n rowData.rank = 1000000;\r\n }\r\n };\r\n };\r\n //сортируем в обратном порядке, так новая строка всегда будет последней\r\n grid.dataView.fastSort('rank', false);\r\n };\r\n\r\n grid.grid.invalidate();\r\n grid.grid.render();\r\n },\r\n\r\n /**\r\n * Навешивается на событие смены сортировки что бы сохранить состояние и загрузить новые данные.\r\n * @method WebAccess.components.dataViews.gridPlugins.SortingPlugin#_bindOnSort \r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _bindOnSort: function () {\r\n var me = this;\r\n\r\n me._grid.grid.onSort.subscribe(function (e, args) {\r\n me._grid.updateState({\r\n Sort: [{ Name: args.sortCol.id, IsAsc: args.sortAsc }]\r\n });\r\n\r\n if (me._useServer) {\r\n me._grid.reloadData();\r\n } else {\r\n\r\n var comparer = function (g1, g2) {\r\n var v1 = g1[args.sortCol.field];\r\n var v2 = g2[args.sortCol.field];\r\n var type = requisiteTypeToString(args.sortCol.type);\r\n // Дробные и целые числа могут быть записаны в формате \"1 234 567,34\". Такая запись не конвертируется в число, поэтому берем значение без форматирования.\r\n //CREVIEW Шамов А.: Тут Int64?\r\n if (type === 'float' || type === 'integer') {\r\n v1 = g1[args.sortCol.id];\r\n v2 = g2[args.sortCol.id];\r\n }\r\n return WA.utils.compareData(v1, v2, type);\r\n };\r\n\r\n me._grid.dataView.sort(comparer, args.sortAsc);\r\n }\r\n });\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","\"use strict\";\r\n(function groupingPlugin(global) {\r\n\r\n //TODO: Шамов А.: В целом не понятно как она работает. Часть функций в гриде часть тут. Надо бы как-то сделать понятнее, например максимально перенести из грида сюда. \r\n\r\n /**\r\n * Плагин для группировки в таблице.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.GroupingPlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя пункта меню.\r\n * @property {string} grid Таблица.\r\n * @since 5.2.0.1100\r\n */\r\n global.GroupingPlugin = WA.Plugin.extend({\r\n name: 'GroupingPlugin',\r\n _grid: null,\r\n _oldGrouping: null,\r\n\r\n _groupItemMetadataProvider: null,\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#register\r\n * @param {grid} Таблица\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._super();\r\n me._grid = grid;\r\n\r\n me._groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();\r\n\r\n var E = WA.CMP.DV.Grid.EVENT;\r\n grid.bind(E.BEFORE_GRID_INIT, $.proxy(me._onGridBeforeInit, me));\r\n grid.bind(E.GRID_INIT, $.proxy(me._onGridInit, me));\r\n grid.bind(E.COLUMN_INIT, $.proxy(me._onColumnInit, me));\r\n grid.bind(E.GET_VISIBLE_COLUMNS_FOR_DIALOG, $.proxy(me._onGetVisibleColumnsForDialog, me));\r\n grid.bind(E.SET_VISIBLE_COLUMNS_FROM_DIALOG, $.proxy(me._onSetVisibleColumnsFromDialog, me));\r\n grid.bind(E.AFTER_DATA_LOADED, $.proxy(me._onAfterDataLoaded, me));\r\n\r\n return {\r\n 'unGroupColumnsById': me._unGroupColumnsById_exported,\r\n 'updateGroupingInfo': me._updateGroupingInfo_exported,\r\n 'toogleGrouping': me._toogleGrouping_exported\r\n };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Модификация видимых колонок грида для отображения колонок с группировкой.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onGetVisibleColumnsForDialog\r\n * @since 5.2.0.1100\r\n * @private \r\n */\r\n _onGetVisibleColumnsForDialog: function (columns) {\r\n var me = this;\r\n me._includeGroupedColumns(columns);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Модификация видимых колонок грида для разгруппировки и задания видимых колонок.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onGetVisibleColumnsForDialog\r\n * @since 5.2.0.1100\r\n * @private \r\n */\r\n _onSetVisibleColumnsFromDialog: function (columns) {\r\n var me = this;\r\n me._excludeGroupedColumns(columns);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Разгруппировка списка колонок.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_unGroupColumnsById_exported\r\n * @since 5.2.0.1100\r\n * @private \r\n */\r\n _unGroupColumnsById_exported: function (columnIds) {\r\n var me = this;\r\n var grouping = _(me.state.GroupColumns).map(function (column) {\r\n if (columnIds.indexOf(column.Name) !== -1) {\r\n var selector = '#' + me.grid.getUID() + column.Name;\r\n selector = selector.replaceAll(' ', '\\\\ ');\r\n $(selector).remove();\r\n me.dataView.removeGroupBy(column.Name);\r\n return null\r\n } else {\r\n return column;\r\n }\r\n });\r\n\r\n me.updateState({ GroupColumns: _(grouping).compact() });\r\n me.reloadData();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Начальная модификация колонок грида для поддержки группировки\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onColumnInit\r\n * @since 5.2.0.1100\r\n * @private \r\n */\r\n _onColumnInit: function (byref_column) {\r\n var isSpecialColumn = (byref_column.id.charAt(0) === '_');\r\n byref_column.type === 'Date'\r\n var isFloatColumn = (byref_column.type === 'Float');\r\n\r\n byref_column.headerCssClass = (isSpecialColumn ? 'notDraggable' : ''); // Отключяем группировку по реквизиту типа \"Дробное число\", т.к. делать сравнение 2 дробных чисел сложно.\r\n\r\n if (!isSpecialColumn) {\r\n byref_column['grouping'] = {\r\n getter: byref_column.id,\r\n formatter: function (g) {\r\n return byref_column.name + \": \" + g.rows[0][byref_column.field];\r\n },\r\n comparer: function (g1, g2) {\r\n var direction = byref_column.grouping.sortAsc ? 1 : -1;\r\n // Сравнивает по отображаемому значению.\r\n var v1 = g1.rows[0][byref_column.field];\r\n var v2 = g2.rows[0][byref_column.field];\r\n \r\n return direction * WA.utils.compareData(v1, v2, byref_column.type)\r\n },\r\n collapsed: true,\r\n sortAsc: true\r\n };\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установка дополнительных опции грида. Поскольку это событие, то приходится менять объект по ссылке.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onGridBeforeInit\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _onGridBeforeInit: function (containerSelector, byref_dataView, columns, byref_options) {\r\n byref_options['enableDraggableGroupBy'] = true;\r\n byref_dataView['groupItemMetadataProvider'] = this._groupItemMetadataProvider;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Метод срабатывает после создания экземпляра slickGrid-а в классе грида. \r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onGridInit\r\n * @param {slickGrid} объект грида \r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _onGridInit: function (slickGrid) {\r\n var me = this;\r\n log.debug('GRID', 'onGridInit method called');\r\n\r\n // register the group item metadata provider to add expand/collapse group handlers\r\n me._grid.grid.registerPlugin(this._groupItemMetadataProvider);\r\n\r\n //При пермещении колонок в области группировки обновляем состояние в соответсвии с новым порядком колонок\r\n me._grid.grid.onColumnsReordered.subscribe(function () {\r\n log.debug('GRID', 'Event onColumnsReordered emited(GROUPING_PLUGIN)');\r\n var grouping = me._getGrouping();\r\n var newGrouping = _(grouping).pluck('Name');\r\n\r\n log.debug('GRID', 'Updating columns grouping');\r\n\r\n /** \r\n * Если группировка изменилась, то будем сворачивать расскрытые группы и \r\n * обновим саму группировку в state.\r\n * Иначе ничего не меняем, чтобы смена местами обычных колонок (не группируемых) работала \r\n * не сворачивая групп \r\n * @see #97566 Если поменять колонки местами при раскрытой группе в гриде, то группа закроется\r\n */\r\n if (!_.isEqual(newGrouping, me._oldGrouping)) {\r\n me._grid.updateState({ GroupColumns: grouping });\r\n me._grid.dataView.collapseAllGroups();\r\n me._grid.reloadData();\r\n }\r\n\r\n me._oldGrouping = newGrouping;\r\n });\r\n\r\n // Событие разгруппировки.\r\n me._grid.grid.onUnGroup.subscribe(function (event, data) {\r\n log.debug('GRID', 'Event onUnGroup emited');\r\n var jColumn = data.column;\r\n var columnId = jColumn.find('span').attr('name');\r\n me._grid.dataView.removeGroupBy(columnId, null, jColumn);\r\n var index = $('.slick-header-columns div.slick-header-column', me._grid.containerSelector).index(jColumn);\r\n me._grid.showColumn(columnId, index);\r\n });\r\n\r\n // Смена сортировки по колонке с группировкой.\r\n me._grid.grid.onGroupSort.subscribe(function (e, args) {\r\n log.debug('GRID', 'Event onGroupSort emited');\r\n var prevGrouping = me._grid.state.GroupColumns;\r\n var groupCol = _(prevGrouping).findWhere({ Name: args.columnId });\r\n groupCol.SortIsAsc = args.sortAsc;\r\n\r\n me._grid.updateState({ GroupColumns: prevGrouping }, true); //true - потому изменяется объект по ссылке и сравнение внутри updateState не корректно сработает.\r\n me._grid.reloadData();\r\n });\r\n\r\n me._restoreGrouping();\r\n me._handleGroupToggle();\r\n me._oldGrouping = _(me._getGrouping()).pluck('Name');\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Востановление группировки при перезагрузке страницы \r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_restoreGrouping\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _restoreGrouping: function () {\r\n log.debug('GRID', 'Restoring grouping');\r\n var me = this;\r\n\r\n /**\r\n * Показ скрытие области группировки\r\n */\r\n me._grid.toogleGrouping(me._grid.state.IsGroupPanelVisible);\r\n\r\n /**\r\n * Восстановление представления шапки и логической группировки грида\r\n */\r\n me._grid.dataView.setGrid(me._grid.grid);\r\n if (me._grid.state.GroupColumns) {\r\n\r\n // #97328 Если не стало прав на реквизит, по которому идет группировка, то грид ломается\r\n var shrinked = _(_(me._grid.state.GroupColumns).map(function (column) {\r\n var gridColumn = _(me._grid._columns).findWhere({ 'id': column.Name });\r\n if (!!gridColumn) return column;\r\n else return null;\r\n })).compact();\r\n\r\n var columns = _(shrinked).map(function (column) {\r\n var gridColumn = _(me._grid._columns).findWhere({ 'id': column.Name });\r\n // Восстановление направления сортировки по группе.\r\n gridColumn.grouping.sortAsc = column.SortIsAsc\r\n return gridColumn;\r\n });\r\n\r\n me._grid.dataView.restoreGroupedColumns(columns);\r\n }\r\n\r\n /**\r\n * Восстановление раскрытых строк\r\n */\r\n _(me._grid.state.GroupColumns).each(function (column, level) {\r\n _(column.Opened).each(function (chain) {\r\n me._grid.dataView.expandCollapseGroup(level, chain, false);\r\n });\r\n });\r\n\r\n me._setupGroupsReordering();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Обработка раскрытия групп. \r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_handleGroupToggle\r\n * @since 5.2.0.1100 \r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _handleGroupToggle: function () {\r\n var me = this;\r\n me._grid.dataView.prepareDataBeforeToggle = function (groupingKey, isCollapsed) {\r\n me._grid.updateGroupingInfo(groupingKey, isCollapsed);\r\n let options = { isClickOnToggle: true };\r\n return me._grid.reloadData(options);\r\n };\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Реализация возможности изменения порядка колонок, по которым идет группировка\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_setupGroupsReordering\r\n * @private\r\n * @since 5.2.0.1100 \r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _setupGroupsReordering: function () {\r\n log.debug('GRID', 'Groups sorting setup');\r\n var me = this;\r\n\r\n $('.slick-groupby').sortable({\r\n containment: me._grid.containerSelector,\r\n connectWith: \".connected\",\r\n cursor: 'move',\r\n tolerance: \"pointer\",\r\n distance: 20,\r\n cancel: '.slick-placeholder, .group-arrow',\r\n placeholder: \"slick-sortable-placeholder ui-state-default slick-header-column\",\r\n forcePlaceholderSize: true,\r\n stop: function (event, element) {\r\n me._grid.dataView.beginUpdate();\r\n me._grid.dataView.resortGroupColumns();\r\n },\r\n receive: function (event, ui) {\r\n\r\n // Группировка - перенос из шапки грида в область группировки.\r\n if (ui.item.hasClass('notDraggable')) {\r\n $(ui.sender).sortable('cancel');\r\n var toast = new WA.CMP.NTF.Toast();\r\n toast.showWarning(L('GROUPING_IS_NOT_AVAILABLE_FOR_THIS_COLUMN'));\r\n return;\r\n };\r\n\r\n me._grid.updateState({ \"PageIndex\": 0 });\r\n\r\n var jColumn = $(ui.item);\r\n var columnId = jColumn.find('span').attr('name');\r\n var index = $('.slick-groupby div.slick-header-column', me._grid.containerSelector).index(jColumn);\r\n\r\n // Смотрим какая была сортировка у этой колонки, что бы её применить в группе.\r\n var sortColumnInfo = _(me._grid.state.Sort).findWhere({ Name: columnId });\r\n var column = _(me._grid._columns).findWhere({ id: columnId });\r\n column.grouping.sortAsc = (!sortColumnInfo || sortColumnInfo.IsAsc);\r\n\r\n me._grid.dataView.handleGroupByDrop($(), ui.item, index);\r\n me._grid.dataView.bindGroupSort(jColumn, me._grid._columns);\r\n\r\n jColumn.css({ 'width': 'auto' });\r\n me._grid.hideColumn(columnId);\r\n }\r\n });\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение информации о группировке от грида, и выдача его в виде\r\n * пригодном для сохранения в state\r\n * @private\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#getGrouping\r\n * @return {array} groups\r\n */\r\n _getGrouping: function () {\r\n var me = this;\r\n\r\n var groups = _(me._grid.dataView.getGrouping()).map(function (col) {\r\n return {\r\n Name: col.getter,\r\n SortIsAsc: col.sortAsc,\r\n Opened: []\r\n };\r\n });\r\n\r\n me._updatePlaceHolder(groups.length);\r\n return groups;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать/скрыть текст-подсказку в области группировки\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_updatePlaceHolder\r\n * @param {int} groupsCount кол-во групп\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _updatePlaceHolder: function (groupsCount) {\r\n var me = this;\r\n if (groupsCount > 0) {\r\n $(\".slick-placeholder\", me._grid.containerSelector).hide();\r\n } else {\r\n $(\".slick-placeholder\", me._grid.containerSelector).show();\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Метод вызывается внешним классом groupitemmetadataprovider, для того, \r\n * чтобы обновить информацию по сворачиванию/разворачиванию определенных групп\r\n * для дальнейшего сохранения в обеъект state;\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#updateGroupingInfo_exported\r\n * @param {String} groupingKey ключ вида \"123213:|:323423\" - иерархия раскрытия групп\r\n * @param {isExpand} призна того раскрывается группа или сворчивается\r\n * @this {WebAccess.components.dataViews.Grid}\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.Grid}\r\n */\r\n _updateGroupingInfo_exported: function (groupingKey, isExpand) {\r\n log.debug('GRID', 'Updating grouping info: ' + groupingKey);\r\n var me = this;\r\n var values = groupingKey.split(':|:');\r\n var lastIndex = values.length - 1;\r\n\r\n var currentGrouping = me.state.GroupColumns;\r\n if (isExpand) {\r\n currentGrouping[lastIndex].Opened.push(groupingKey);\r\n } else {\r\n var index = currentGrouping[lastIndex].Opened.indexOf(groupingKey);\r\n currentGrouping[lastIndex].Opened.splice(index, 1);\r\n }\r\n\r\n me.updateState({\r\n GroupColumns: currentGrouping,\r\n LastCollapsedGroupingKey: (!isExpand ? groupingKey : '__NOT_KEY__')\r\n }, true);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие после загрузки данных.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_onAfterDataLoaded\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.GroupingPlugin} GroupingPlugin\r\n */\r\n _onAfterDataLoaded: function () {\r\n // Сбрасываем последную закрытую группу.\r\n this._grid.updateState({\r\n LastCollapsedGroupingKey: '__NOT_KEY__'\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показ/скрытие области группировки\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#toogleGrouping_exported\r\n * @this {WebAccess.components.dataViews.Grid}\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.Grid}\r\n */\r\n _toogleGrouping_exported: function (needToEnable) {\r\n log.debug('GRID', 'Toggling group area: ' + needToEnable);\r\n var me = this;\r\n var jPHolder = $('.slick-placeholder', me.containerSelector);\r\n var jGroupBy = $('.slick-groupby', me.containerSelector);\r\n\r\n jPHolder.text(L('DRAG_A_COLUMN_HEADER_HERE_TO_GROUP_BY_THAT_COLUMN'));\r\n if (me.state.GroupColumns.length) {\r\n jPHolder.hide();\r\n } else {\r\n jPHolder.show();\r\n }\r\n\r\n if (needToEnable) {\r\n jGroupBy.show();\r\n\r\n me.grid.setOptions({\r\n showGroupByRow: true,\r\n groupByRowHeight: jGroupBy.outerHeight()\r\n });\r\n me.grid.resizeViewport();\r\n me.updateState({ IsGroupPanelVisible: true }, true);\r\n } else {\r\n jGroupBy.hide();\r\n\r\n me.grid.setOptions({ showGroupByRow: false });\r\n me.grid.resizeViewport();\r\n me.updateState({ IsGroupPanelVisible: false }, true);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включает группы в список видимых колонок для диалога.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_includeGroupedColumns\r\n * @this {WebAccess.components.dataViews.Grid}\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.Grid}\r\n */\r\n _includeGroupedColumns: function (byref_visibleColumns) {\r\n var me = this;\r\n\r\n _(me._grid.state.GroupColumns).each(function (groupInfo) {\r\n var column = _(me._grid._columns).find(function (col) {\r\n return col.id === groupInfo.Name;\r\n });\r\n byref_visibleColumns.push(column);\r\n });\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Исключает группы из списока видимых колонок и разгруппировывает группы.\r\n * @method WebAccess.components.dataViews.gridPlugins.GroupingPlugin#_excludeGroupedColumns\r\n * @this {WebAccess.components.dataViews.Grid}\r\n * @since 5.2.0.1100\r\n * @private\r\n * @return {WebAccess.components.dataViews.Grid}\r\n */\r\n _excludeGroupedColumns: function (byref_visibleColumns) {\r\n var me = this;\r\n var unGroupingColumns = [];\r\n\r\n _(me._grid.state.GroupColumns).each(function (groupInfo) {\r\n\r\n // Ищем групп в списке возвращенных видимых колонок.\r\n var index = _(byref_visibleColumns).findIndex(function (visibleColumn) {\r\n return visibleColumn.id === groupInfo.Name;\r\n });\r\n if (index !== -1) {\r\n // Если нашли, то просто удаляем её из видимых колонок.\r\n byref_visibleColumns.splice(index, 1);\r\n } else {\r\n // Если НЕ нашли, то добавляем в список разгруппируемых.\r\n unGroupingColumns.push(groupInfo.Name);\r\n }\r\n });\r\n\r\n // Выполняем разгруппировку.\r\n me._grid.unGroupColumnsById(unGroupingColumns);\r\n\r\n return me;\r\n }\r\n\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","\"use strict\";\r\n(function footerPlugin(global) {\r\n\r\n /**\r\n * Плагин для области навигации между страницами таблицы.\r\n *\r\n * @property {string} name Имя плагина.\r\n * @property {integer} pageIndex Текущая страница\r\n * @property {integer} pageSize Количество строк таблицы на странице\r\n * @since 5.2.0.1100\r\n * @class WebAccess.components.dataViews.gridPlugins.FooterPlugin\r\n * @extends WebAccess.Plugin\r\n */\r\n global.FooterPlugin = WA.Plugin.extend({\r\n name: 'FooterPlugin',\r\n\r\n pageIndex: 0,\r\n pageSize: 100, // Для реального количества записей на странице используется значение из константы REFERENCE_RECORDS_PAGE_SIZE в бекэнде.\r\n\r\n _grid: null,\r\n _jPager: null,\r\n _jPagerControls: null,\r\n _selectExpression: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function () {\r\n this._super();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} grid Таблица.\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._super();\r\n\r\n me._grid = grid;\r\n\r\n grid.bind(WA.CMP.DV.Grid.EVENT.STATE_LOADED, $.proxy(me._afterGridStateLoaded, me));\r\n grid.bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, $.proxy(me._afterGridDataLoaded, me));\r\n grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, $.proxy(me._onGridInit, me));\r\n\r\n return {\r\n 'updateFooter': $.proxy(me._updateFooter_exported, me)\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обрабатывает события до инициализации таблицы.\r\n *\r\n * @param {object} slickGrid Таблица\r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_onGridInit\r\n */\r\n _onGridInit: function (slickGrid) {\r\n var me = this;\r\n\r\n me.initPager().done(function () {\r\n\r\n // Обновление состояния кнопок, в зависимости от количества оставшихся записей.\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.DATA_LOADED, function (index, recordsCount, records) {\r\n\r\n me.renderTemplates().done(function () {\r\n\r\n index = index || \"0\"\r\n index = +index;\r\n\r\n recordsCount = +recordsCount;\r\n\r\n if (recordsCount < me.pageSize && !me._grid.state.GroupColumns.length && index === 0) {\r\n me._setCountLabel(recordsCount);\r\n }\r\n\r\n me.pageIndex = index;\r\n\r\n if (index === 0 && recordsCount <= me.pageSize) {\r\n me._jPagerControls.navPanel.hide();\r\n } else {\r\n me._jPagerControls.navPanel.show();\r\n }\r\n\r\n if (index > 0) {\r\n // используемая версия jQuery не умеет работать с css-классами элементов svg. Приходится использовать data-атрибуты.\r\n me._jPagerControls.prev.add(me._jPagerControls.first).attr('data-disabled', 'false');\r\n } else {\r\n me._jPagerControls.prev.add(me._jPagerControls.first).attr('data-disabled', 'true');\r\n }\r\n\r\n var recordsFrom = (index * me.pageSize) + 1;\r\n var recordsTo = (index + 1) * me.pageSize;\r\n\r\n if (!isNaN(recordsCount)) {\r\n // Если реально вернулось больше чем нужно, то значит у нас есть следующая страница.\r\n if (recordsCount <= me.pageSize) {\r\n recordsTo = recordsFrom + recordsCount - 1;\r\n me._jPagerControls.next.add(me._jPagerControls.last).attr('data-disabled', 'true');\r\n } else {\r\n me._jPagerControls.next.add(me._jPagerControls.last).attr('data-disabled', 'false');\r\n }\r\n }\r\n\r\n var currentPageText = (recordsCount > 1) ? (recordsFrom + ' - ' + recordsTo) : (index + recordsCount);\r\n me._jPagerControls.currentPage.text(currentPageText);\r\n\r\n // Если реально вернулось больше чем нужно, то значит у нас есть следующая страница, а эту лишную запись удалим, т.к. она загрузится на след. странице.\r\n if (recordsCount > me.pageSize) {\r\n // Удаляем лишнюю строку.\r\n records.pop();\r\n }\r\n });\r\n });\r\n\r\n // Перемотка кверху при переключении страницы.\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.PAGE_CHANGE, function () {\r\n me._grid.grid.scrollRowToTop(0);\r\n });\r\n\r\n });\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обрабатывает события завершения загрузки состояния таблицы.\r\n *\r\n * @param {object} slickGrid Таблица.\r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_onGridInit\r\n */\r\n _afterGridStateLoaded: function () {\r\n var me = this;\r\n\r\n // Проверяем надо ли восстанавливать номер страницы.\r\n var gridId = me._grid.containerSelector; //другого ИД у нас тут еще нет.\r\n var url = new WA.URL();\r\n var pageIndexSaved = $.parseJSON(decodeURIComponent(url.getParamInHash('pageIndexSaved')) || '[]');\r\n if (pageIndexSaved.indexOf(gridId) === -1) {\r\n // Сбрасываем состояние страницы.\r\n WA.cache.setItem('grid.pageIndex.' + gridId, 0);\r\n // Добавляем текущий грид в состояние сохранения номера страницы грида.\r\n pageIndexSaved.push(gridId);\r\n url.setParamInHash('pageIndexSaved', encodeURIComponent($.toJSON(pageIndexSaved)));\r\n window.location.href = url.asString();\r\n }\r\n\r\n // Восстанавливаем номер страницы.\r\n me._grid.updateState({\r\n PageIndex: +WA.cache.getItem('grid.pageIndex.' + gridId) || 0\r\n });\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обрабатывает события до завершения загрузки данных.\r\n *\r\n * @param {object} slickGrid Таблица.\r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_onGridInit\r\n */\r\n _afterGridDataLoaded: function () {\r\n var me = this;\r\n\r\n // Сохраняем номер страницы для последующего восставновления при перезагрузке страницы браузера.\r\n var gridId = me._grid.containerSelector;\r\n WA.cache.setItem('grid.pageIndex.' + gridId, me._grid.state.PageIndex);\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Публичная функция для обновления пагинатора.\r\n * @param {object} slickGrid грид\r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_updateFooter_exported\r\n */\r\n _updateFooter_exported: function () {\r\n this.renderTemplates();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включает область навигации.\r\n *\r\n * @since 5.2.0.1100\r\n * @param {String} containerSelector Блок, содержащий таблицу.\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#initPager\r\n * @return {WebAccess.components.dataViews.gridPlugins.FooterPlugin} FooterPlugin Навигация между страницами таблицы.\r\n */\r\n initPager: function () {\r\n var me = this;\r\n var jGridContainer = $(me._grid.containerSelector);\r\n\r\n if (me._grid.state.PageIndex) me.pageIndex = +me._grid.state.PageIndex;\r\n if (me._grid.state.Take) me.pageSize = +me._grid.state.Take;\r\n me._jPager = $('
    ');\r\n jGridContainer.append(me._jPager);\r\n\r\n return me.renderTemplates();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Генерирует область навигации из шаблона.\r\n *\r\n * @since 5.2.0.1100\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#renderTemplates\r\n * @return {WebAccess.components.dataViews.gridPlugins.FooterPlugin} FooterPlugin Навигация между страницами таблицы.\r\n */\r\n renderTemplates: function () {\r\n var me = this;\r\n var state = me._grid.state;\r\n\r\n var selectOn = function (limit) {\r\n if (limit == me.pageSize) return 'selected=\"selected\"';\r\n };\r\n\r\n var partials = {\r\n left: \"referenceRecords/status.html\",\r\n center: \"referenceRecords/filters.html\",\r\n right: \"referenceRecords/paginator.html\"\r\n }\r\n\r\n var currentFilter = state.CurrentFilter || { 'Name': '', 'DisplayValue': '', 'DisplayHint': '', 'isEnabled': false }\r\n var currentRecordsRange = (me.pageIndex * me.pageSize) > 0 ? ((me.pageIndex * me.pageSize) + 1) + ' - ' + ((me.pageIndex + 1) * me.pageSize) : '1 - ' + me.pageSize;\r\n var filterName = $.trim(currentFilter.Name);\r\n\r\n var data = WA.TMPL.prepare({\r\n ID: 'reference_footer',\r\n 'class': 'dxgvPagerBottomPanel',\r\n HasFilterExpression: (currentFilter.DisplayValue !== ''),\r\n CurrentFilterName: filterName.trunc(50),\r\n CurrentFilterNameHint: filterName,\r\n FilterExpression: currentFilter.DisplayValue,\r\n FilterHint: currentFilter.DisplayHint,\r\n IsFilterEnabled: currentFilter.IsEnabled,\r\n CurrentRecordsRange: currentRecordsRange,\r\n CurrentPage: me.pageIndex + 1,\r\n PageIndex: me.pageIndex,\r\n Options: [\r\n { Name: 15, Selected: selectOn(15) },\r\n { Name: 25, Selected: selectOn(25) },\r\n { Name: 50, Selected: selectOn(50) },\r\n { Name: 100, Selected: selectOn(100) }\r\n ],\r\n FirstDisabled: false,\r\n PrevDisabled: false,\r\n NextDisabled: false,\r\n LastDisabled: false\r\n });\r\n\r\n\r\n return WA.TMPL.render('layouts/3Columns.html', data, false, false, partials).done(function (pager) {\r\n\r\n me._jPager.html(pager);\r\n\r\n me._grid.grid.setOptions({\r\n showPagerRow: true,\r\n pagerRowHeight: me._jPager.outerHeight()\r\n });\r\n\r\n me._grid.grid.resizeViewport();\r\n\r\n me._bindEvents();\r\n me._initCounter();\r\n });\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработчики событий\r\n * @since 5.2.0.1100\r\n * @private\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_bindEvents\r\n * @return {WebAccess.components.dataViews.gridPlugins.FooterPlugin} FooterPlugin\r\n */\r\n _bindEvents: function () {\r\n var me = this;\r\n me._jPagerControls = {\r\n resetFilterState: $('.resetFilterState', me._jPager),\r\n changeFilterState: $('.changeFilterState', me._jPager),\r\n navPanel: $('.grid-paginator', me._jPager),\r\n next: $('#gridNextPage', me._jPager),\r\n prev: $('#gridPrevPage', me._jPager),\r\n first: $('#gridFirstPage', me._jPager),\r\n last: $('#gridLastPage', me._jPager),\r\n pageSize: $('.gridChangePageSize', me._jPager),\r\n currentPage: $('.gridCurrentPage', me._jPager)\r\n };\r\n\r\n me._bindFilterEvents();\r\n me._bindPagerEvents();\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n // Навешивает элементы управления фильтром.\r\n _bindFilterEvents: function () {\r\n var me = this;\r\n\r\n // Очистить фильтр.\r\n me._jPagerControls.resetFilterState.click(function () {\r\n window.Filters.resetFilter();\r\n });\r\n\r\n // Вкл/Выкл фильтра\r\n me._jPagerControls.changeFilterState.click(function () {\r\n window.Filters.changeFilterState($(this).is(':checked'));\r\n });\r\n\r\n return me;\r\n },\r\n\r\n // Навешивает события на пагинатор.\r\n _bindPagerEvents: function () {\r\n var me = this;\r\n\r\n var isDisabled = function (el) {\r\n el = $(el);\r\n // используемая версия jQuery не умеет работать с css-классами элементов svg. Приходится использовать data-атрибуты.\r\n if (el.attr('data-disabled') === 'true') return true;\r\n return false;\r\n };\r\n\r\n var afterClick = function (el) {\r\n el = $(el);\r\n el.attr('data-disabled', 'true');\r\n\r\n me._getData().done(function () {\r\n me._grid.fire(WA.CMP.DV.Grid.EVENT.PAGE_CHANGE, me.pageIndex);\r\n el.attr('data-disabled', 'false');\r\n });\r\n };\r\n\r\n me._jPagerControls.next.click(function () {\r\n if (isDisabled(this)) return;\r\n me.pageIndex += 1;\r\n afterClick(this);\r\n });\r\n\r\n me._jPagerControls.prev.click(function () {\r\n if (isDisabled(this)) return;\r\n me.pageIndex -= 1;\r\n if (me.pageIndex < 0) me.index = 0;\r\n afterClick(this);\r\n });\r\n\r\n me._jPagerControls.first.click(function () {\r\n if (isDisabled(this)) return;\r\n me.pageIndex = 0;\r\n afterClick(this);\r\n });\r\n\r\n me._jPagerControls.last.click(function () {\r\n if (isDisabled(this)) return;\r\n me.pageIndex = -1;\r\n afterClick(this);\r\n });\r\n\r\n me._jPagerControls.pageSize.change(function () {\r\n var prevPageLimit = me.pageSize;\r\n var prevPageIndex = me.pageIndex;\r\n\r\n me.pageSize = $(this).val();\r\n me.pageIndex = 0;\r\n afterClick(this);\r\n me._grid.fire(WA.CMP.DV.Grid.EVENT.PAGE_LIMIT_CHANGE, me.pageSize);\r\n });\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Обработчик события нажатия на кол-во записей\r\n * @since 5.2.0.1100\r\n * @private\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_initCounter\r\n * @return {WebAccess.components.dataViews.gridPlugins.FooterPlugin} FooterPlugin\r\n */\r\n _initCounter: function () {\r\n var me = this;\r\n $('.RowCount', me.jPager)\r\n .html(L(\"RECORDS_TOTAL_LINK\"))\r\n .addClass('dashed')\r\n .attr(\"title\", L(\"SHOW_EXACT_RECORDS_COUNT\"))\r\n .one('click', $.proxy(me._toggleRecordCountDisplayMode, me)); //добавляем возможность получения точного количества записей\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Изменяет \"Всего записей\" на реальное количество.\r\n * @since 5.2.0.1100\r\n * @private\r\n * @method WebAccess.components.dataViews.gridPlugins.FooterPlugin#_initCounter\r\n * @return {WebAccess.components.dataViews.gridPlugins.FooterPlugin} FooterPlugin\r\n */\r\n _toggleRecordCountDisplayMode: function () {\r\n var me = this;\r\n var jRowCount = $('.RowCount', me.jPager).removeClass('dashed');\r\n\r\n var spinner = $('.counterSpinner', me.jPager);\r\n var spinnerShowDelay = setTimeout(function () {\r\n jRowCount.hide();\r\n spinner.show();\r\n }, 300);\r\n\r\n var filter = me._grid.state.GlobalPageFilter || '';\r\n var currentFilter = me._grid.state.CurrentFilter;\r\n if (currentFilter) {\r\n if (currentFilter.IsEnabled) {\r\n if (!filter) {\r\n filter = currentFilter.Expression;\r\n } else {\r\n if (currentFilter.Expression !== '') {\r\n filter = '(' + filter + ') & (' + currentFilter.Expression + ')';\r\n }\r\n }\r\n }\r\n }\r\n\r\n me._grid._dataSource.totalCount(filter, me._grid.state.GlobalPageFilterLikeQuery).done(function (res) {\r\n clearTimeout(spinnerShowDelay);\r\n spinner.hide();\r\n // Меняем на точное\r\n me._setCountLabel(res);\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _setCountLabel: function (total) {\r\n var me = this;\r\n var jRowCount = $('.RowCount', me.jPager).removeClass('dashed');\r\n\r\n jRowCount\r\n .html(L(\"RECORDS_TOTAL\", total))\r\n .attr(\"title\", L(\"EXACT_RECORDS_COUNT\"))\r\n .show();\r\n },\r\n\r\n /**\r\n * Отправка запроса на получение данных с учетом страницы и кол-ва записей\r\n * @private\r\n * @method getData\r\n */\r\n _getData: function () {\r\n var me = this;\r\n var loadOptions = {\r\n PageIndex: me.pageIndex,\r\n Take: me.pageSize\r\n };\r\n return me._grid.reloadData(loadOptions);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);\r\n","(function checkboxPlugin(global) {\r\n \"use strict\";\r\n\r\n /**\r\n * Плагин для колонки таблицы с флажком.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.CheckboxPlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя плагина. \r\n * @since 5.2.0.1100\r\n */\r\n global.CheckboxPlugin = WA.Plugin.extend({ \r\n name: 'CheckboxPlugin',\r\n\r\n // Грид. \r\n _grid: null,\r\n // Стандартный плагин для чекбоксов.\r\n _checkboxSelector: null,\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.CheckboxPlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} Таблица\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы. \r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._grid = grid;\r\n \r\n\r\n me._checkboxSelector = new Slick.CheckboxSelectColumn({\r\n columnId: '_Checkbox',\r\n cssClass: 'slick-cell-checkboxsel',\r\n toolTip: L('SELECT_ALL'),\r\n headerCssClass: 'centered notDraggable',\r\n width: 30\r\n });\r\n\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.BEFORE_GRID_INIT, $.proxy(me._onGridBeforeInit, me));\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, $.proxy(me._onGridInit, me));\r\n return {};\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Хэндлер события до инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.CheckboxPlugin#_onGridBeforeInit\r\n * @param {string} containerSelector селектор контейнера для грида.\r\n * @param {Object} dataView представление данных.\r\n * @param {Object} columns описания всех колонок.\r\n * @param {Object} settings настройки грида.\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridBeforeInit: function (containerSelector, dataView, columns, settings) { \r\n var me = this;\r\n var checkboxColumndDef = this._checkboxSelector.getColumnDefinition();\r\n var column = _.findWhere(columns, { id: checkboxColumndDef.id });\r\n $.extend(column, checkboxColumndDef);\r\n \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработчик события инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.CheckboxPlugin#_onGridInit\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridInit: function () {\r\n var me = this;\r\n this._grid.grid.setSelectionModel(new Slick.RowSelectionModel({ selectActiveRow: false }));\r\n this._grid.grid.registerPlugin(this._checkboxSelector);\r\n\r\n this._grid.dataView.syncGridSelection(me._grid.grid, true);\r\n\r\n // Для работы objectList.\r\n me._grid.grid.onSelectedRowsChanged.subscribe(function (e, args) { \r\n me._grid.fire(WA.CMP.DV.Grid.EVENT.SELECTED_ROWS_CHANGED);\r\n });\r\n\r\n // Пометка галочкой строки по клику на свободное место.\r\n me._grid.grid.onClick.subscribe(function (e, args) {\r\n \r\n // Для строк без данных не выделяем.\r\n if (me._grid.dataView.getItem(args.row).__nonDataRow) return; \r\n\r\n me._grid.grid.getSelectionModel().selectOnClickEvent(e, true);\r\n // вызываем событие изменения checkbox-а для работы клиентской ОМ\r\n var el = $(e.target).parents('.List:first').find(\"input.chk\");\r\n el.trigger('itemChecked', []);\r\n });\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","(function contextMenuPlugin(global) {\r\n \"use strict\";\r\n\r\n /**\r\n * Плагин для контекстного меню таблицы.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin\r\n * @extends WebAccess.Plugin\r\n * @param {Object} options Настройки контекстного меню\r\n * @property {string} name Имя плагина\r\n * @since 5.2.0.1100\r\n */\r\n global.ContextMenuPlugin = WA.Plugin.extend({ \r\n name: 'ContextMenuPlugin',\r\n\r\n // Настройки.\r\n _contextMenuOptions: {},\r\n _customMenuClass: null,\r\n _contextMenu: null, \r\n _grid: null,\r\n _form: null,\r\n \r\n init: function (args, opt_form) {\r\n var me = this;\r\n this._super();\r\n if (opt_form) me._form = opt_form;\r\n if (!args.from) {\r\n this._customMenuClass = args;\r\n } else {\r\n this._contextMenuOptions = args;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} grid Таблица\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._grid = grid;\r\n\r\n return {\r\n 'openContextMenu': $.proxy(me._openContextMenu_exported, me)\r\n };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открытие контекстного меню.\r\n * @method WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin#_openContextMenu_exported\r\n * @private\r\n * @param {HTMLElement} el Элемент, на котором вызвали контекстное меню\r\n * @param {Event} ev Событие\r\n * @since 5.2.0.1100\r\n */\r\n _openContextMenu_exported: function (el, ev) {\r\n var me = this;\r\n\r\n var x = ev.pageX || ev.clientX;\r\n var y = ev.pageY || ev.clientY;\r\n\r\n if (this._contextMenuOptions.from) {\r\n me._openLegacyContextMenu(x,y,ev,el);\r\n } else {\r\n me._openBaseContextMenu(x,y,ev);\r\n }\r\n\r\n // Предотвращаем открытие стандратного контекстного меню браузера\r\n if (ev.preventDefault) ev.preventDefault();\r\n ev.cancelBubble = true;\r\n return false;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открытие контекстного который был раньше, в pages.js\r\n * @method WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin#_openLegacyContextMenu\r\n * @private\r\n * @param {integer} x-координата\r\n * @param {integer} y-координата\r\n * @param {Event} ev Событие.\r\n * @since 5.2.0.1100\r\n */\r\n _openLegacyContextMenu: function (x, y, ev, el) {\r\n var me = this;\r\n var jEl = $(el);\r\n jEl.attr('name', 'MenuIcon');\r\n ShowContextMenu(jEl, this._contextMenuOptions, (ev ? { 'left': x, 'top': y } : {}));\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Открытие контекстного меню с использованием Клиентской ОМ\r\n * @method WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin#_openBaseContextMenu\r\n * @private\r\n * @param {integer} x-координата\r\n * @param {integer} y-координата\r\n * @param {Event} ev Событие.\r\n * @since 5.2.0.1100\r\n */\r\n _openBaseContextMenu: function (x, y, ev) {\r\n var me = this;\r\n WA.Init.done(function () {\r\n me._customMenuClass.setGrid(me._grid);\r\n me._customMenuClass.setForm(me._form);\r\n me._contextMenu = new WA.CMP.menus.BaseContextMenu('body', me._customMenuClass.generateItems(ev), {\r\n 'onShow': function () {\r\n me._removeMenuSelectCssClassAndReturnClickedRow(ev).addClass('menu_select');\r\n },\r\n 'onHide': function () {\r\n me._removeMenuSelectCssClassAndReturnClickedRow(ev);\r\n }\r\n });\r\n me._contextMenu.showAt(x, y, ev);\r\n me._customMenuClass.bindActionsToMenuItems(me._contextMenu, ev, me._grid);\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаляет CSS-класс menu_select со всех строк таблицы и возвращаает ту строку, которой кликнули.\r\n * @method WebAccess.components.dataViews.gridPlugins.ContextMenuPlugin#_removeMenuSelectCssClassAndReturnClickedRow\r\n * @private\r\n * @param {Event} ev Событие.\r\n * @since 5.2.0.1300\r\n */\r\n _removeMenuSelectCssClassAndReturnClickedRow: function (ev) {\r\n var target = ev.target || ev.srcElement;\r\n var jRow = $(target).parents('div.slick-row');\r\n jRow.parent().children('.menu_select').removeClass('menu_select');\r\n return jRow;\r\n }\r\n\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","(function columnResizePlugin(global) {\r\n \"use strict\";\r\n\r\n /**\r\n * Плагин для изменения ширины колонок таблицы.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя плагина\r\n * @since 5.2.0.1100\r\n */\r\n global.ColumnResizePlugin = WA.Plugin.extend({\r\n name: 'ColumnResizePlugin',\r\n\r\n // Грид. \r\n _grid: null,\r\n // Настройки.\r\n _settings: null,\r\n\r\n init: function (settings) {\r\n this._super();\r\n this._settings = $.extend({}, settings);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} Таблица\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._grid = grid;\r\n\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.COLUMN_INIT, $.proxy(me._onColumnInit, me));\r\n //me._grid.bind(WA.CMP.DV.Grid.EVENT.BEFORE_GRID_INIT, $.proxy(me._onGridBeforeInit, me));\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, $.proxy(me._onGridInit, me));\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, $.proxy(me._onAfterGridDataLoaded, me));\r\n\r\n // Отключать надо для планшетов и если будут редактироваться ячейки.\r\n if (!me._settings['disableOnResizeBinding']) {\r\n $(window).on(\"resizeEnd\", $.proxy(me._onWindowsResize, me));\r\n }\r\n\r\n return {\r\n 'autoAdjustColumnWidth': $.proxy(me._autoAdjustColumnWidth_exported, me)\r\n };\r\n },\r\n\r\n /**\r\n * Делаем все колонки растягивабельными\r\n * @method WebAccess.components.dataViews.gridPlugins.CheckboxPlugin#_onColumnInit\r\n * @param {object} byref_column колонка\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onColumnInit: function (byref_column) {\r\n var me = this;\r\n var isSpecialColumn = (byref_column.id.charAt(0) === '_');\r\n byref_column.resizable = !isSpecialColumn;\r\n\r\n if (me._grid.state && me._grid.state['ColumnsWidth'] && me._grid.state['ColumnsWidth'][byref_column.id] > 0) {\r\n byref_column.width = me._grid.state['ColumnsWidth'][byref_column.id];\r\n }\r\n },\r\n\r\n /**\r\n * Хэндлер события инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#_onGridInit\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridInit: function () {\r\n var me = this;\r\n\r\n // Если ColumnsWidth пустой или заполнен некорректными значениями заполнить его при инициализации грида,\r\n // это нужно для корректной выгрузки записей справочника в ексель.\r\n if (me._columnsWidthIsEmpty())\r\n me._saveColumnWidthState(me._grid.state.IsColumnsAutoWidthEnabled);\r\n\r\n me._grid.grid.onColumnsResized.subscribe(function () {\r\n me._saveColumnWidthState(me._grid.state.IsColumnsAutoWidthEnabled);\r\n });\r\n },\r\n\r\n /**\r\n * Возвращает признак пустоты объекта Core.grid.reference.state.ColumnsWidth\r\n * @returns {bool}\r\n * @private\r\n * @since 5.2.0.2005-beta\r\n */\r\n _columnsWidthIsEmpty: function () {\r\n var result = false;\r\n var columnsWidth = this._grid.state['ColumnsWidth'];\r\n\r\n if (jQuery.isEmptyObject(columnsWidth)) {\r\n result = true;\r\n } else {\r\n $.each(columnsWidth, function (key, value) {\r\n // При первом открытии справочника объект пустой, а при обновлении размеры всех колонок -1.\r\n if (value === -1) {\r\n result = true;\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * Хэндлер события \"После загрузки данных\".\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#_onAfterGridDataLoaded\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onAfterGridDataLoaded: function () {\r\n if (this._grid.state.IsColumnsAutoWidthEnabled === true) {\r\n this._autoAdjustColumnWidth_exported(true);\r\n }\r\n },\r\n\r\n /**\r\n * Хэндлер события \"Изменение размера окна браузера\".\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#_onWindowsResize\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onWindowsResize: function () {\r\n this._grid.grid.resizeCanvas();\r\n this._onAfterGridDataLoaded.call(this);\r\n },\r\n\r\n /**\r\n * Автоподбор ширины колонок.\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#_autoAdjustColumnWidth_exported\r\n * @param {boolean} isEnabled Включен ли автоподбор ширины колонок.\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _autoAdjustColumnWidth_exported: function (isEnabled) {\r\n var me = this;\r\n\r\n // Что бы нельзя было при включенном режиме растянуть колонки за пределы видимой области.\r\n me._grid.grid.setOptions({\r\n forceFitColumns: isEnabled\r\n });\r\n\r\n if (isEnabled) {\r\n //Если включили, то отресайзим колонки. \r\n me._grid.grid.autosizeColumns();\r\n }\r\n\r\n me._saveColumnWidthState(isEnabled);\r\n },\r\n\r\n /**\r\n * Сохранение текущих размеров колонок в состоянии грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.ColumnResizePlugin#_saveColumnWidthState\r\n * @param {boolean} IsColumnsAutoWidthEnabled Включен ли автоподбор ширины колонок\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _saveColumnWidthState: function (IsColumnsAutoWidthEnabled) {\r\n var me = this;\r\n var columnsWidth = {};\r\n var columns = me._grid.grid.getColumns();\r\n for (var i = 0; i < columns.length; i++) {\r\n // \"~~\" операция двойного побитового NOT.\r\n // Использется как более быстрая реализация Math.floor().\r\n // floor() используется для округления числа в меньшую сторону.\r\n columnsWidth[columns[i].id] = ~~columns[i].width;\r\n }\r\n\r\n // Обновим состояние (сохраним в профиль пользователя).\r\n me._grid.updateState({\r\n IsColumnsAutoWidthEnabled: IsColumnsAutoWidthEnabled,\r\n ColumnsWidth: columnsWidth\r\n }, true);\r\n }\r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","(function filteringPlugin(global) {\r\n \"use strict\";\r\n\r\n var SELECT_LIST_PAGE_SIZE = 50;\r\n var SPECIAL_VALUE = global._controls.selectList.SPECIAL_VALUE;\r\n var DATE_SPECIAL_VALUE = global._controls.selectList.DATE_SPECIAL_VALUE;\r\n\r\n /**\r\n * Плагин для фильтра таблицы.\r\n *\r\n * @class WebAccess.components.dataViews.gridPlugins.FilteringPlugin\r\n * @extends WebAccess.Plugin\r\n * @param {WebAccess.dataViews.grid.BaseDataProvider} selectListDataProvider Класс, предоставляющий данные для компоненты selectList\r\n * @property {string} name Имя плагина\r\n * @property {integer} groupDisplayLimit Максимальная длина отображаемого значения фильтра по колонке\r\n * @property {WebAccess.dataViews.grid.BaseDataProvider} selectListDataProvider Класс, предоставляющий данные для компоненты selectList\r\n * @since 5.2.0.1100\r\n */\r\n var FilteringPlugin = global.FilteringPlugin = WA.Plugin.extend({\r\n\r\n name: 'FilteringPlugin',\r\n groupDisplayLimit: 40,\r\n selectListDataProvider: null,\r\n\r\n _grid: null,\r\n _controls: [],\r\n _selectListContainerSelector: '.selectList',\r\n _popupSelector: '.selectListPopup',\r\n _slickHeaderSelector: '.slick-headerrow',\r\n _dataPickerInputSelector: '.dateField',\r\n _datePickerSelector: '.ui-datepicker',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (selectListDataProvider) {\r\n var me = this;\r\n me._super();\r\n me._controls = [];\r\n if (!!selectListDataProvider) me.selectListDataProvider = selectListDataProvider;\r\n else WA.raise('SELECT_LIST_DATA_PROVIDER_IS_REQUIRED');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрирует плагин.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} grid Таблица\r\n * @since 5.2.0.1100\r\n * @return {object} Ассоциативный массив, содержащий публичные методы.\r\n */\r\n register: function (grid) {\r\n var me = this;\r\n me._grid = grid;\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, WA.TCD($.proxy(me._onGridInit, me)));\r\n return {\r\n toggleFiltering: me._toggleFiltersArea_exported,\r\n updateFilter: $.proxy(me._updateFilter_exported, me),\r\n getFillingRequisites: $.proxy(me._getFillingRequisites, me)\r\n };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показ/скрытие облсти фильтрации\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_toggleFiltersArea_exported\r\n * @private\r\n * @this {grid}\r\n * @since 5.2.0.1100\r\n */\r\n _toggleFiltersArea_exported: function (needToEnable) {\r\n var me = this;\r\n log.debug('GRID', 'Toggling filter area: ' + needToEnable);\r\n\r\n var jArea = $(me._slickHeaderSelector, me._selectListContainerSelector);\r\n\r\n if (needToEnable) {\r\n jArea.show();\r\n me.grid.setHeaderRowVisibility(true);\r\n me.grid.resizeViewport();\r\n me.updateState({ IsFilterPanelVisible: true }, true);\r\n } else {\r\n jArea.hide();\r\n me.grid.setHeaderRowVisibility(false);\r\n me.grid.resizeViewport();\r\n me.updateState({ IsFilterPanelVisible: false }, true);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработчик события инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_onGridInit\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _onGridInit: function () {\r\n var me = this;\r\n var columnFilters = {};\r\n\r\n var CF = me._grid.state.CurrentFilter;\r\n me._updateFilterExpression()\r\n\r\n me._grid.updateState({ CurrentFilter: CF });\r\n (!!me._grid.updateFooter) && me._grid.updateFooter();\r\n\r\n me._grid.toggleFiltering(me._grid.state.IsFilterPanelVisible);\r\n\r\n // Закрытие всех выпадающих списоков всех контролов.\r\n $(document).mouseup(function (e) {\r\n var container = $(me._popupSelector).add(me._datePickerSelector).add(me._dataPickerInputSelector);\r\n if (!container.is(e.target) && container.has(e.target).length === 0 && e.target != $('html').get(0)) {\r\n _(me._controls).each(function (control) {\r\n var jTarget = $(e.target);\r\n if (!!jTarget.attr(\"id\")) {\r\n if (jTarget.attr(\"id\") !== control.instanceID) control.close();\r\n } else {\r\n control.close();\r\n }\r\n });\r\n }\r\n });\r\n\r\n //При фильтрации, обновим у всех контролов выражение фильтрации\r\n //У того контрола по которому идет фильтрация, выражение выпилим\r\n me.bind(FilteringPlugin.EVENT.FILTER_UPDATE, function (filter, expression) {\r\n _(me._controls).each(function (control) {\r\n control.state.expression = me._getColumnExpression(filter, control.state.column.id);\r\n });\r\n });\r\n\r\n me._grid.grid.onHeaderRowCellRendered.subscribe($.proxy(me.renderControl, me));\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает поле фильтрации.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#renderControls\r\n * @since 5.2.0.1100\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n */\r\n renderControl: function (event, data) {\r\n var me = this;\r\n var closeOtherControls = function (control) {\r\n _(_(me._controls).filter(function (c) {\r\n return control.instanceID !== c.instanceID\r\n })).each(function (c) {\r\n c.close();\r\n });\r\n }\r\n\r\n var column = data.column;\r\n var grid = data.grid;\r\n var container = data.node;\r\n var columnFilters = me._grid.state.CurrentFilter.ColumnsFilter;\r\n switch (column.type) {\r\n case 'Integer':\r\n case 'LargeInteger':\r\n case 'Float':\r\n case 'String':\r\n case 'Pick':\r\n case 'Document':\r\n case 'Reference':\r\n var SelectList = global._controls.selectList.SelectListControl;\r\n var columnFilter = (!!columnFilters) ? columnFilters[column.id] : null;\r\n\r\n var like = (columnFilter) ? columnFilter.Like : '';\r\n var selectedRecords = (!!columnFilter && columnFilter.Type == 'In') ? columnFilter.In : [];\r\n var notSelectedRecords = (!!columnFilter && columnFilter.Type == 'Exclude') ? columnFilter.In : [];\r\n var invertedMode = !!notSelectedRecords.length;\r\n\r\n var selectList = new SelectList(container, new me.selectListDataProvider(me._grid.settings.selectListDataProviderSettings), {\r\n column: column,\r\n requisiteName: column.id,\r\n take: SELECT_LIST_PAGE_SIZE,\r\n skip: 0,\r\n page: 0,\r\n expression: me._getColumnExpression(columnFilters, column.id),\r\n like: like,\r\n selectedRecords: selectedRecords, //CREVIEW Шамов А.: Название selectedRecords больше относится к справочнику, может переименуем в selectedItems? //поздно уже это менять\r\n notSelectedRecords: notSelectedRecords,\r\n invertedMode: invertedMode,\r\n plugins: [new global._controls.selectList.SpecialValuesPlugin()]\r\n });\r\n\r\n //Скрывать все остальные открытые контролы, когда текущий открыт\r\n selectList.bind(SelectList.EVENT.BEFORE_LIST_OPEN, $.proxy(closeOtherControls, me));\r\n selectList.bind(SelectList.EVENT.VALUE_CHANGED, function (value) { me._updateStateAndReloadData(column, value); });\r\n me._controls.push(selectList);\r\n break;\r\n\r\n case 'Date':\r\n var SelectList = global._controls.selectList.SelectListControl;\r\n var columnFilter = (!!columnFilters) ? columnFilters[column.id] : null;\r\n\r\n var like = (columnFilter) ? columnFilter.Like : '';\r\n var selectedRecords = (!!columnFilter && columnFilter.Type == 'In') ? columnFilter.In : [];\r\n var notSelectedRecords = (!!columnFilter && columnFilter.Type == 'Exclude') ? columnFilter.In : [];\r\n var invertedMode = !!notSelectedRecords.length;\r\n\r\n var selectList = new SelectList(container, new me.selectListDataProvider(me._grid.settings.selectListDataProviderSettings), {\r\n column: column,\r\n requisiteName: column.id,\r\n take: SELECT_LIST_PAGE_SIZE,\r\n skip: 0,\r\n page: 0,\r\n expression: me._getColumnExpression(columnFilters, column.id),\r\n like: like,\r\n selectedRecords: selectedRecords, //CREVIEW Шамов А.: Название selectedRecords больше относится к справочнику, может переименуем в selectedItems? //поздно уже это менять\r\n notSelectedRecords: notSelectedRecords,\r\n invertedMode: invertedMode,\r\n plugins: [\r\n new global._controls.selectList.DateValuesPlugin(),\r\n new global._controls.selectList.SpecialValuesPlugin()\r\n ]\r\n });\r\n\r\n //Скрывать все остальные открытые контролы, когда текущий открыт\r\n selectList.bind(SelectList.EVENT.BEFORE_LIST_OPEN, $.proxy(closeOtherControls, me));\r\n selectList.bind(SelectList.EVENT.VALUE_CHANGED, function (value) { me._updateStateAndReloadData(column, value); });\r\n me._controls.push(selectList);\r\n\r\n break;\r\n case 'Empty':\r\n $(container).append('

    ');\r\n break;\r\n default:\r\n $.noop();\r\n }\r\n return me;\r\n },\r\n\r\n /**\r\n * Обновление фильтрации грида при смене значения в одном из контролов\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_updateStateAndReloadData\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _updateStateAndReloadData: function (column, value) {\r\n var me = this;\r\n log.debug('GRID', 'Updating filter');\r\n\r\n var CF = me._grid.state.CurrentFilter;\r\n var isPrevAutoFilter = (CF.ID == '0');\r\n var isPrevEmptyFilter = (CF.ID == '-1');\r\n\r\n CF.ColumnsFilter[column.id] = value;\r\n me._updateFilterExpression();\r\n\r\n CF.IsNeedSave = true;\r\n // Если фильтра больше нет, то сбросим его совсем.\r\n if (CF.Expression === '') {\r\n $.extend(CF, {\r\n ID: '-1',\r\n Name: '',\r\n ColumnsFilter: {}\r\n });\r\n\r\n // Удалим автофильтр.\r\n delete me._grid.state.SavedFilters['0'];\r\n\r\n if (Filters && Filters.resetFilter) Filters.resetFilter();\r\n } else {\r\n CF.ID = '0';\r\n if (!CF.Name || !isPrevAutoFilter) {\r\n CF.Name = me._getAutoFilterName();\r\n }\r\n\r\n // Обновим или добавим имя автосохраненного фильтра в список сохраненных.\r\n me._grid.state.SavedFilters[CF.ID] = CF.Name;\r\n\r\n // Включим новый фильтр, даже если предыдущий был выключен.\r\n CF.IsEnabled = true;\r\n }\r\n\r\n //Обновляем контекстное меню в ленте.\r\n if (Filters && Filters.setupFiltersState) Filters.setupFiltersState();\r\n\r\n me._grid.updateState({\r\n CurrentFilter: CF,\r\n PageIndex: 0\r\n });\r\n\r\n me.fire(FilteringPlugin.EVENT.FILTER_UPDATE, CF.ColumnsFilter, CF.Expression);\r\n\r\n if (!!me._grid.updateFooter) me._grid.updateFooter();\r\n\r\n // Сбросить выделение\r\n me._grid.grid.setSelectedRows([]);\r\n\r\n me._grid.reloadData();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновление выражения фильтрации и состояние контролов.\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_updateFilter_exported\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _updateFilter_exported: function () {\r\n var me = this;\r\n me._updateFilterExpression();\r\n me._updateControlsState();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновления выраженяи фильтрации.\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_updateFilterExpression\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _updateFilterExpression: function () {\r\n var me = this;\r\n var CF = me._grid.state.CurrentFilter;\r\n $.extend(CF, {\r\n ColumnsFilter: me._removeDeniedColumns(CF.ColumnsFilter),\r\n Expression: me._convertToSBRSE(CF.ColumnsFilter),\r\n DisplayValue: me._convertToHumanRedableText(CF.ColumnsFilter, true),\r\n DisplayHint: me._convertToHumanRedableText(CF.ColumnsFilter)\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить колонки из фильтра если фильтрация по ним невозможна\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_removeDeniedColumns\r\n * @private\r\n * @since 5.2.0.1100\r\n * @see #98783\r\n */\r\n _removeDeniedColumns: function (filter) {\r\n var me = this;\r\n var allColumnsIds = _(me._grid._columns).pluck('id');\r\n _(filter).each(function (f, name) {\r\n if (allColumnsIds.indexOf(name) === -1) {\r\n delete filter[name];\r\n }\r\n });\r\n return filter;\r\n },\r\n\r\n /**\r\n * Получить имя \"автофильтра\"\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_updateStateAndReloadData\r\n * @private\r\n * @return {String}\r\n * @since 5.2.0.1100\r\n */\r\n _getAutoFilterName: function () {\r\n var filters = this._grid.state.SavedFilters;\r\n var maxFilterID = _(_(_(filters).keys()).map(function (k) {\r\n return +k; // Преобразуем в число, что бы вычислить max.\r\n })).max();\r\n return L('AUTO_FILTER_LABEL') + ' ' + Math.max(maxFilterID + 1, 1); //Если фильтров нет, то max вернет -Infinity, а имя фильтра сделаем с номером 1.\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовние объекта фильтра в человеко-читаемую строку для футера\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_convertToHumanRedableText\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _convertToHumanRedableText: function (filter, needTrunc) {\r\n var me = this;\r\n needTrunc = !!needTrunc;\r\n\r\n var expression = _(filter).map(function (reqFilter, requsiteName) {\r\n var expression = '';\r\n\r\n var column = _(me._grid._columns).find(function (col) {\r\n return col.id == requsiteName;\r\n });\r\n\r\n var columnName = column.name;\r\n\r\n switch (reqFilter.Type) {\r\n case 'Exclude':\r\n expression = _(reqFilter.In).map(function (record) {\r\n if (record.Type && record.Type === SPECIAL_VALUE.BLANK) return columnName + wrapWith.space(L('NOT')) + L('CHOICE_BLANK');\r\n if (record.Type && record.Type === SPECIAL_VALUE.NOBLANK) return columnName + wrapWith.space(L('NOT')) + L('CHOICE_NONBLANK');\r\n return columnName + wrapWith.space(L('NOT')) + $.trim(record.DisplayValue);\r\n }).join(wrapWith.space(L('FILTER_OR')));\r\n break;\r\n\r\n case 'In':\r\n expression = _(reqFilter.In).map(function (record) {\r\n if (record.Type && record.Type === SPECIAL_VALUE.BLANK) return columnName + wrapWith.space('=') + L('CHOICE_BLANK');\r\n if (record.Type && record.Type === SPECIAL_VALUE.NOBLANK) return columnName + wrapWith.space('=') + L('CHOICE_NONBLANK');\r\n return columnName + wrapWith.space('=') + $.trim(record.DisplayValue);\r\n }).join(wrapWith.space(L('FILTER_OR')));\r\n break;\r\n case 'Like':\r\n if (reqFilter.Like) expression = columnName + wrapWith.space(L('FILTER_CONTAINS')) + reqFilter.Like;\r\n break;\r\n case 'Equal':\r\n if (column.type === 'Date') {\r\n if (!!reqFilter.Equal) {\r\n var d = Date.fromISO(reqFilter.Equal);\r\n if (!isNaN(d.getTime())) {\r\n //Формат должен зависить от языка веб-доступа.\r\n var formatFunc = (column.dateType === 'DateTime' ? formatDateTime : formatDate);\r\n expression = columnName + wrapWith.space('=') + formatFunc(d);\r\n }\r\n }\r\n } else {\r\n if (reqFilter.Equal) {\r\n expression = columnName + wrapWith.space('=') + reqFilter.Equal;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n expression = needTrunc ? expression.trunc(me.groupDisplayLimit) : expression;\r\n if (!!expression) expression = wrapWith.group(expression);\r\n return expression;\r\n });\r\n\r\n expression = _(expression).compact().join(wrapWith.space(L('FILTER_AND')));\r\n return expression;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Преобразовние объекта фильтра в строку-выражение SBRSE;\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_convertToHumanRedableText\r\n * @private\r\n * @return {WebAccess.components.dataViews.gridPlugins.FilteringPlugin}\r\n * @since 5.2.0.1100\r\n */\r\n _convertToSBRSE: function (filter) {\r\n var me = this;\r\n\r\n var expression = _(filter).map(function (reqFilter, requsiteName) {\r\n var expression = null;\r\n\r\n var column = _(me._grid._columns).find(function (col) {\r\n return col.id == requsiteName;\r\n });\r\n\r\n var getDateFilter = function (record, mode) {\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.YESTERDAY) {\r\n var yesterday = new Date();\r\n yesterday.setDate(yesterday.getDate() - 1);\r\n return expression = me._makeOneDayDateExpression(requsiteName, yesterday);\r\n }\r\n\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.TODAY) return expression = me._makeOneDayDateExpression(requsiteName, new Date());\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.TOMORROW) {\r\n var tomorrow = new Date();\r\n tomorrow.setDate(tomorrow.getDate() + 1);\r\n return expression = me._makeOneDayDateExpression(requsiteName, tomorrow);\r\n }\r\n\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.THIS_WEEK) {\r\n var curr = new Date();\r\n var day = curr.getDay()\r\n firstDay = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + (day == 0 ? -6 : 1) - day);\r\n lastDay = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate() + (day == 0 ? 0 : 7) - day);\r\n return expression = me._makeDateBetweenExpression(requsiteName, firstDay, lastDay);\r\n }\r\n\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.THIS_MONTH) {\r\n var curr = new Date();\r\n var firstDay = new Date(curr.getFullYear(), curr.getMonth(), 1);\r\n var lastDay = new Date(curr.getFullYear(), curr.getMonth() + 1, 0);\r\n return expression = me._makeDateBetweenExpression(requsiteName, firstDay, lastDay);\r\n }\r\n\r\n if (record.Type && record.Type === DATE_SPECIAL_VALUE.THIS_YEAR) {\r\n var curr = new Date();\r\n var firstDay = new Date(curr.getFullYear(), 0, 1);\r\n var lastDay = new Date(curr.getFullYear(), 11, 31);\r\n return expression = me._makeDateBetweenExpression(requsiteName, firstDay, lastDay);\r\n }\r\n }\r\n\r\n switch (reqFilter.Type) {\r\n case 'Exclude':\r\n if (!reqFilter.In.length) return null;\r\n expression = '!' + wrapWith.group(_(reqFilter.In).map(function (record) {\r\n if (record.Type && record.Type === SPECIAL_VALUE.BLANK) return wrapWith.block(requsiteName) + ' = NULL';\r\n if (record.Type && record.Type === SPECIAL_VALUE.NOBLANK) return wrapWith.block(requsiteName) + ' != NULL';\r\n\r\n var dateFilter = getDateFilter(record);\r\n if (dateFilter) return dateFilter;\r\n\r\n var operand = (column.type === \"String\" ? 'matches' : '=');\r\n return wrapWith.block(requsiteName) + ' ' + operand + ' \"' + record.Value + '\"';\r\n }).join(' | '));\r\n break;\r\n\r\n case 'In':\r\n expression = _(reqFilter.In).map(function (record) {\r\n if (record.Type && record.Type === SPECIAL_VALUE.BLANK) return wrapWith.block(requsiteName) + ' = NULL';\r\n if (record.Type && record.Type === SPECIAL_VALUE.NOBLANK) return wrapWith.block(requsiteName) + ' != NULL';\r\n\r\n var dateFilter = getDateFilter(record);\r\n if (dateFilter) return dateFilter;\r\n\r\n if (column.type === 'Date') {\r\n var likeExpr = me._makeDateTimeLikeExpression(requsiteName, record.Value, column.dateType);\r\n if (!!likeExpr) expression = likeExpr;\r\n return expression;\r\n }\r\n\r\n var operand = (column.type === \"String\" ? 'matches' : '=');\r\n return wrapWith.block(requsiteName) + ' ' + operand + ' \"' + record.Value + '\"';\r\n }).join(' | ');\r\n break;\r\n\r\n case 'Like':\r\n // Like должен работать по отображаемому значению, а для справочника и признака он хранится вдругом месте.\r\n var value = reqFilter.Like.replaceAll('%', '[%]').replaceAll('\"', '\\\\\"');\r\n\r\n var displayValueFieldName = requsiteName;\r\n switch (column.type) {\r\n case 'Reference':\r\n case 'Document':\r\n case 'Pick':\r\n displayValueFieldName = column.field;\r\n break;\r\n case 'Float':\r\n value = value.replaceAll(',', '.');\r\n break;\r\n }\r\n if (reqFilter.Like) expression = wrapWith.block(displayValueFieldName) + ' like \"%' + value + '%\"';\r\n\r\n if (column.type === 'Date' && !!reqFilter.Like) {\r\n var likeExpr = me._makeDateLikeExpression(requsiteName, reqFilter.Like, column.dateType);\r\n if (!!likeExpr) expression = likeExpr;\r\n }\r\n break;\r\n case 'Equal':\r\n if (column.type === 'Date' && !!reqFilter.Equal) {\r\n // Для совместимости со старыми фильтрами.\r\n var d = Date.fromISO(reqFilter.Equal);\r\n if (!isNaN(d.getTime())) {\r\n var likeExpr = me._makeDateTimeLikeExpression(requsiteName, d, column.dateType);\r\n if (!!likeExpr) expression = likeExpr;\r\n }\r\n } else {\r\n if (reqFilter.Equal) {\r\n expression = wrapWith.block(requsiteName) + ' = ' + reqFilter.Equal;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return wrapWith.group(expression);\r\n })\r\n\r\n expression = _(expression).compact().join(' & ');\r\n return expression;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Формирует выражение фильтрации для like по указанной дате или дате со временем.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_makeDateTimeLikeExpression\r\n * @param {string} requsiteName Имя реквизита.\r\n * @param {string} likeValue Значение для фильтрации.\r\n * @param {string} dateType Тип даты.\r\n * @private\r\n * @return {string} Выражение фильтрации.\r\n */\r\n _makeDateTimeLikeExpression(requsiteName, likeValue, dateType) { \r\n const dateValue = (typeof likeValue === 'string') ? parseDateTime(likeValue) : likeValue;\r\n\r\n if (this._isDateTimeCorrect(dateValue)) {\r\n if (dateType === 'DateTime') {\r\n const fromDate = formatDateTime(dateValue, 'dd.mm.yy hh:mm:00', false);\r\n const toDate = formatDateTime(new Date(dateValue.getTime() + 60000), 'dd.mm.yy hh:mm:00'); //+1 мин. \r\n return `(${wrapWith.block(requsiteName)} >= #${fromDate}# & ${wrapWith.block(requsiteName)} < #${toDate}#)`;\r\n } else {\r\n return this._makeOneDayDateExpression(requsiteName, dateValue);\r\n }\r\n }\r\n return '';\r\n },\r\n \r\n /**\r\n * Формирует выражение фильтрации для like по указанной дате.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_makeDateLikeExpression\r\n * @param {string} requsiteName Имя реквизита.\r\n * @param {string} likeValue Значение для фильтрации. \r\n * @private\r\n * @return {string} Выражение фильтрации.\r\n */\r\n _makeDateLikeExpression(requsiteName, likeValue) { \r\n const dateValue = (typeof likeValue === 'string') ? parseDateTime(likeValue) : likeValue;\r\n if (this._isDateTimeCorrect(dateValue)) {\r\n return this._makeOneDayDateExpression(requsiteName, dateValue);\r\n }\r\n return ''; \r\n },\r\n \r\n /**\r\n * Проверяет корректность даты.\r\n *\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_isDateTimeCorrect\r\n * @param {object} dateValue Дата.\r\n * @private\r\n * @return {boolean} TRUE, если дата корректная, иначе - FALSE.\r\n */\r\n _isDateTimeCorrect(dateValue) { \r\n return dateValue && dateValue.getFullYear() < 10000 && !isNaN(dateValue.getTime());\r\n },\r\n \r\n // Формирует выражение фильтрации по дате за один день.\r\n _makeOneDayDateExpression: function (requsiteName, d) {\r\n return this._makeDateBetweenExpression(requsiteName, d, d);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n // Формирует выражение фильтрации по интервалу дат.\r\n _makeDateBetweenExpression: function (requsiteName, d, d2) {\r\n var expression = '(' + wrapWith.block(requsiteName) + ' >= #' + formatDate(d, 'dd.mm.yy') + ' 00:00:00# & ';\r\n expression += wrapWith.block(requsiteName) + ' < #' + formatDate(new Date(d2.getTime() + 24 * 3600000), 'dd.mm.yy') + ' 00:00:00#)';\r\n return expression;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _getColumnExpression: function (filter, columnId) {\r\n var me = this;\r\n var currentFilter = _(filter).clone();\r\n delete currentFilter[columnId];\r\n var currentFilterExpr = me._convertToSBRSE(currentFilter);\r\n\r\n var GF = me._grid.state.GlobalPageFilter;\r\n if (GF) {\r\n if (currentFilterExpr) {\r\n return '(' + GF + ') & (' + currentFilterExpr + ')';\r\n } else {\r\n return GF;\r\n }\r\n } else {\r\n return currentFilterExpr;\r\n }\r\n },\r\n\r\n /**\r\n * Получение значений фильтрации для заполнения новой записи\r\n * @method WebAccess.components.dataViews.gridPlugins.FilteringPlugin#_getFillingRequisites\r\n * @private\r\n */\r\n _getFillingRequisites: function () {\r\n var me = this;\r\n var requisites = {};\r\n var value;\r\n _(me._controls).each(function (control) {\r\n var requsiteName = control.state.requisiteName;\r\n\r\n var column = _(me._grid._columns).find(function (col) {\r\n return col.id == requsiteName;\r\n });\r\n\r\n\r\n if (control.className === 'SelectListControl') {\r\n value = control.getValue();\r\n\r\n if (value.Type === 'In') {\r\n var record = value.In[0];\r\n\r\n if (!record) return;\r\n\r\n var today = new Date();\r\n\r\n switch (record.Value) {\r\n case SPECIAL_VALUE.BLANK:\r\n case SPECIAL_VALUE.NOBLANK:\r\n case SPECIAL_VALUE.ALL:\r\n return\r\n break\r\n case DATE_SPECIAL_VALUE.YESTERDAY:\r\n today.setDate(today.getDate() - 1);\r\n requisites[requsiteName] = formatDateTime(today);\r\n return\r\n break\r\n case DATE_SPECIAL_VALUE.TODAY:\r\n requisites[requsiteName] = formatDateTime(today);\r\n return\r\n break\r\n case DATE_SPECIAL_VALUE.TOMORROW:\r\n today.setDate(today.getDate() + 1);\r\n requisites[requsiteName] = formatDateTime(today);\r\n return\r\n }\r\n\r\n\r\n switch (column.type) {\r\n case 'String':\r\n requisites[requsiteName] = record.DisplayValue\r\n break;\r\n case 'Date':\r\n var d = parseDateTime(record.Value);\r\n if (!d) return;\r\n if (d.getFullYear() > 9999) return;\r\n\r\n requisites[requsiteName] = formatDateTime(d);\r\n break;\r\n default:\r\n requisites[requsiteName] = record.Value;\r\n }\r\n }\r\n\r\n if (value.Type === 'Equal' || value.Type === 'Like') {\r\n if (column.type === 'Date') {\r\n var date = value.Equal || value.Like;\r\n\r\n var d = parseDateTime(\"\" + date);\r\n if (!d) return;\r\n if (d.getFullYear() > 9999) return;\r\n requisites[requsiteName] = formatDateTime(d);\r\n }\r\n }\r\n\r\n };\r\n });\r\n return $.toJSON(requisites);\r\n },\r\n\r\n _updateControlsState: function () {\r\n var me = this;\r\n var CF = me._grid.state.CurrentFilter;\r\n var columnFilters = CF.ColumnsFilter;\r\n _(me._controls).each(function (c) {\r\n var column = c.state.column;\r\n switch (c.className) {\r\n case 'SelectListControl':\r\n\r\n var columnFilter = (!!columnFilters) ? columnFilters[column.id] : null;\r\n\r\n var like = (columnFilter) ? columnFilter.Like : '';\r\n var selectedRecords = (!!columnFilter && columnFilter.Type == 'In') ? columnFilter.In : [];\r\n var notSelectedRecords = (!!columnFilter && columnFilter.Type == 'Exclude') ? columnFilter.In : [];\r\n var invertedMode = !!notSelectedRecords.length;\r\n\r\n c.updateState({\r\n skip: 0,\r\n page: 0,\r\n expression: me._getColumnExpression(columnFilters, column.id),\r\n like: like,\r\n notSelectedRecords: notSelectedRecords,\r\n invertedMode: invertedMode,\r\n selectedRecords: selectedRecords\r\n });\r\n break;\r\n case 'DateControl':\r\n var equalValue = (columnFilters && columnFilters[column.id]) ? columnFilters[column.id].Equal : '';\r\n c.updateState({\r\n value: equalValue\r\n });\r\n break;\r\n }\r\n });\r\n }\r\n\r\n }, {\r\n EVENT: {\r\n FILTER_UPDATE: 'filterUpdate'\r\n }\r\n });\r\n\r\n /**\r\n * Оборачивание строки в различные скобки\r\n * @inner\r\n */\r\n var wrapWith = {\r\n group: function (str) {\r\n if (!str) return str;\r\n return '(' + str + ')';\r\n },\r\n block: function (str) {\r\n if (!str) return str;\r\n return '[' + str + ']';\r\n },\r\n space: function (str) {\r\n if (!str) return str;\r\n return ' ' + str + ' ';\r\n }\r\n }\r\n\r\n})(WA.components.dataViews.gridPlugins);\r\n","(function DetailsContextMenuLambda(global) {\n\n /*\n * Пункт меню \n */\n var ITEM = {\r\n ADD: 1,\n COPY: 2,\n DELETE: 3\r\n };\n\n /*\n * Имя реквизита \"Номер строки\" \n */\n var ROW_NUMBER = {\r\n VALUE: L('DETAIL_REQ_NUMBER'),\n DISPLAY_VALUE: 'Field_' + L('DETAIL_REQ_NUMBER')\r\n };\n\n /**\n * Контекстное меню для грида\n * @class Core.grid.DetailsContextMenu\n * @extends BaseObject\n */\n global.DetailsContextMenu = BaseObject.extend({\r\n _sectionNumber: null,\n _grid: null,\n _form: null,\n _clickedCell: 1,\n _clickedInContextMenu: false, //что бы событие addRow и выделение активной ячейки срабатывало только при вызове контекстного меню.\n\n init: function (dfmName) {\r\n var me = this;\n me._dfmName = dfmName;\n\n me._clickedCell = 1;\n me._clickedInContextMenu = false;\r\n\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n setGrid: function (grid) {\r\n this._grid = grid;\r\n },\n\n setForm: function (form) {\r\n this._form = form;\r\n },\n\n /**\n * Создание настроек для пунктов меню\n * @method Core.grid.DetailsContextMenu#generateItems\n */\n generateItems: function (event) {\r\n var me = this;\n var rowId = me._getRowIdFromEvent(event);\n var isTableDisabled = this._grid._table.isDisabled();\n\n var item = function (id, label, icon, opt_disabled) {\r\n return {\r\n \"name\": id,\n \"label\": L(label),\n \"icon\": icon,\n \"bottomSeparator\": false,\n \"disabled\": false || opt_disabled\r\n }\r\n };\n return [\n item(ITEM.ADD, 'ADD', 'cardCreate-16', !me._canAddNewRow() || isTableDisabled),\n item(ITEM.COPY, 'COPY', 'cardCopy-16', !rowId || !me._canCopyRow(rowId) || isTableDisabled),\n item(ITEM.DELETE, 'DELETE', 'delete-16', !rowId || isTableDisabled)\n ]\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Навесить обработчки на меню и свзяать их с гридом\n * @method Core.grid.DetailsContextMenu#generateSettings\n */\n bindActionsToMenuItems: function (menu, ev, grid) {\r\n var me = this;\n me._grid = grid;\n\n me._clickedCell = me._getCellNumberFromEvent(ev);\n me._clickedInContextMenu = true;\n\n var table = me._grid._table;\n \n //До добавления новой строки вызываем сохранение выбранного значения в текущем редакторе, что бы оно ушло в datasource и потом сохранилось в БД (замечание №103950).\n table.bind(table.class.EVENT.BEFORE_ROW_ADDED, () => {\r\n const grid = table._grid;\n const editor = grid.grid.getCellEditor();\n if (!!editor) {\r\n editor.commit();\r\n } \r\n });\n\n //TODO Шамов А.: Оптимизировать, т.к. точно такое же есть в EditPlugin.js.\n table.bind('addRow', function (row) {\r\n if (me._clickedInContextMenu) {\r\n log.info('DETAILGRID', 'addRow in DetailsContextMenu');\n var grid = table._grid; \n setTimeout(function () {\n // Смещаем фокус на новую строку в ту же ячейку что и на предыдущей (замечание №103371).\n grid.grid.setActiveCell(grid.grid.getDataLength() - 1, me._clickedCell);\n grid.grid.editActiveCell(); \n me._clickedInContextMenu = false;\r\n }, 100);\r\n }\r\n });\n\n menu.bind('itemSelect', function (item, menu, event) {\r\n var rowId = me._getRowIdFromEvent(event);\n\n switch (item.name) {\r\n case ITEM.ADD:\n me.addRow();\n break\n case ITEM.COPY:\n if (!rowId) return;\n me.copyRow(rowId);\n break\n case ITEM.DELETE:\n if (!rowId) return;\n me.deleteRow(rowId);\n break\r\n }\r\n });\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Добавление новой строки \n * @method Core.grid.DetailsContextMenu#addRow \n */\n addRow: function () {\r\n if (this._canAddNewRow()) {\r\n this._grid._table.addRow();\r\n }\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /** \n * Копирование строки. \n * @method Core.grid.DetailsContextMenu#copyRow \n * @param {integer} rowId ид строки\n */\n copyRow: function (id) {\r\n var me = this;\n var row, rows, reqArray;\n\n var currTable = me._grid._table;\n var detailNum = currTable.detailNum;\n var tablesArr = me._form.details[detailNum].getTables().toArray(); //FIXME: Хз, что делать\n\n // Сначала удаляем пустую строку, если она есть.\n var rowsArr = currTable.rows.toArray();\n for (var i = 0; i < rowsArr.length; i++) {\r\n row = rowsArr[i];\n if (row.isNew() && !row.isChanged()) {\r\n row.remove();\r\n }\r\n }\n\n // Проверить наличие колонок с CanGUIRead = true. Если такие имеются, то в них содержатся\n // \"*\", а не корректные данные\n var currentTableColumns = currTable.columns;\n var hasColumnWithDisabledGuiChange = currentTableColumns.toArray().some(function (column) {\r\n return !column.getCanGUIRead();\r\n });\n\n // Собираем реквизиты со всех вкладок.\n var requisites = {};\r\n for (var t = 0; t < tablesArr.length; t++) {\r\n rows = tablesArr[t].rows;\n row = rows[id];\n if (row) {\r\n reqArray = row.requisites.toArray();\n\n // Создадим словарь\n $.extend(requisites, _.chain(reqArray)\n .filter(function (req) {\r\n var currentColumn = currentTableColumns[req.name];\r\n return !req.isSystem() && currentColumn.getCanGUIRead() && currentColumn.isVisible();\r\n })\n .map(function (item) {\r\n return [item.name, {\r\n value: item.getValue(),\n displayValue: item.getDisplayValue(),\n needTriggerResult: true\r\n }]\r\n }).object().value());\r\n }\r\n }\n\n // Если детальный раздел только один, то копируем на клиенте, иначе копируем на сервере (замечание №104110).\n if (tablesArr.length === 1 && !hasColumnWithDisabledGuiChange) {\n // Копируем строку.\n this._grid._table.addRow(requisites, function (row) {\r\n reqArray = row.requisites.toArray();\n _(reqArray).each(function (req) {\r\n req.touch(); //Если так не делать, то после копирования невозможно будет добавить новую строку\n })\r\n });\r\n\n } else {\n // Копируем строку на сервере (замечание №104110).\n this._grid._table.copyRowOnServer(id, requisites, function (row) {\r\n reqArray = row.requisites.toArray();\n _(reqArray).each(function (req) {\r\n req.touch(); //Если так не делать, то после копирования невозможно будет добавить новую строку\n })\r\n });\r\n }\n\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Удаление строки\n * @method Core.grid.DetailsContextMenu#deleteRow\n * @param {integer} rowId ид строки\n */\n deleteRow: function (rowId) {\r\n this._grid._table.deleteRow(rowId);\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Получить ид-строки над которой было вызвано контекстное меню\n * @method Core.grid.DetailsContextMenu#_getRowIdFromEvent\n * @private\n * @return {integer}\n */\n _getRowIdFromEvent: function (event) {\r\n var target = event.target || event.srcElement;\n var jRow = $(target).parents('div.slick-row');\n var rowId = jRow.attr('id');\n return rowId;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Получить номер колонки над которой было вызвано контекстное меню\n * @method Core.grid.DetailsContextMenu#_getRowIdFromEvent\n * @private\n * @return {integer}\n */\n _getCellNumberFromEvent: function (event) {\r\n var target = $(event.target || event.srcElement);\n var jCell;\n if (target.hasClass('slick-cell')) {\r\n jCell = target;\r\n } else {\r\n jCell = target.parents('.slick-cell:first');\r\n }\n return jCell.index();\r\n },\n\n /**\n * Проверка возможности копирования строки\n * @method Core.grid.DetailsContextMenu#_canCopyRow\n * @private\n * @return {boolean}\n */\n _canCopyRow: function (rowId) {\r\n var row = this._grid._table.rows[rowId];\n if (row.hasFilledRequisites()) {\n return true;\n } else {\n return false;\n }\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Проверка возможности добавления новой строки\n * @method Core.grid.DetailsContextMenu#_canAddNewRow\n * @private\n * @return {boolean}\n */\n _canAddNewRow: function () {\r\n var table = this._grid._table;\n var rows = table.rows.toArray();\n\n if (rows.length) {\r\n var lastRow = rows[rows.length - 1];\n if (lastRow.hasFilledRequisites()) {\n return true;\n } else {\n return false;\n }\n } else {\n return true\n }\r\n }\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n });\r\n\n})(window.WA.components.dataViews.gridPlugins);","(function checkboxPlugin(global) {\r\n \"use strict\";\r\n\r\n /**\r\n * Плагин для возможности редактирования грида\r\n * @class WebAccess.components.dataViews.gridPlugins.EditPlugin\r\n * @extends WebAccess.Plugin\r\n * @property {string} name Имя плагина. \r\n * @since 5.2.0.1300\r\n */\r\n global.EditPlugin = WA.Plugin.extend({\r\n name: 'EditPlugin',\r\n _pending: null,\r\n // Грид. \r\n _grid: null,\r\n _selectionModel: null,\r\n _exceptions: null,\r\n _bindedTables: [],\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистрация плагина.\r\n * @method WebAccess.components.dataViews.gridPlugins.EditPlugin#register\r\n * @param {WebAccess.components.dataViews.Grid} grid расширяемый объект(в данном конкреном случае - это грид).\r\n * @since 5.2.0.1300\r\n * @return {object} публичные методы доступные расширяемому объекту.\r\n */\r\n register: function (grid) {\r\n\r\n var me = this;\r\n me._exceptions = ['.contextmenu', '.rs_results', '.ui-datepicker', '.rs_tr_odd', '.rs_tr_even', '.rs_RefCaption'];\r\n me._grid = grid;\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.BEFORE_GRID_INIT, me._onGridBeforeInit, me);\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.GRID_INIT, me._onGridInit, me);\r\n me._grid.bind(WA.CMP.DV.Grid.EVENT.COLUMN_INIT, me._onColumnInit, me);\r\n me._bindedTables = [];\r\n\r\n log.info('GRID', 'Edit plugin registered');\r\n return {};\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Хэндлер события до инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.EditPlugin#_onGridBeforeInit\r\n * @param {string} containerSelector селектор контейнера для грида.\r\n * @param {Object} dataView представление данных.\r\n * @param {Object} columns описания всех колонок.\r\n * @param {Object} settings настройки грида.\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridBeforeInit: function (containerSelector, dataView, columns, byref_settings) {\r\n var me = this;\r\n byref_settings.enableCellNavigation = true,\r\n byref_settings.editable = true;\r\n byref_settings.autoEdit = true;\r\n //byref_settings.enableAddRow = true; \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обработчик события инициализации грида.\r\n * @method WebAccess.components.dataViews.gridPlugins.EditPlugin#_onGridInit\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onGridInit: function (grid) {\r\n var me = this;\r\n\r\n // Для планшетов и сматфонов отключаем возможность выделять ячейки и строки, что бы заработала прокрутка.\r\n if (!WA.ENV.isTouch()) {\r\n me._selectionModel = new Slick.CellSelectionModel();\r\n grid.setSelectionModel(me._selectionModel);\r\n } else {\r\n me._selectionModel = new Slick.StubSelectionModel();\r\n grid.setSelectionModel(me._selectionModel);\r\n }\r\n\r\n grid.onCellChange.subscribe((e, args) => {\r\n const row = args['item'];\r\n const columns = grid.getColumns();\r\n const column = columns[args.cell];\r\n this._grid.fire('requisiteChange', column.id, row.id, row[column.id], row[column.field]);\r\n });\r\n\r\n grid.onEditorInit.subscribe(function (e, args) {\r\n var row = args['item'];\r\n var colNum = args['cell'];\r\n var columns = grid.getColumns();\r\n var column = columns[args.cell];\r\n var editor = args.editor;\r\n me._grid.fire('editorInit', column.id, row.id, row[column.id], row[column.field], editor);\r\n })\r\n\r\n grid.onBeforeCellEditorDestroy.subscribe(function (e, args) {\r\n me._grid.fire('editorDestroy', e, args);\r\n });\r\n\r\n grid.onGetEditor.subscribe(function (ev, byref_editor) {\r\n me._grid.fire('getEditor', byref_editor);\r\n });\r\n\r\n // Для планшетов и сматфонов отключаем клавиатурную навигацию.\r\n if (!WA.ENV.isTouch()) {\r\n /**\r\n * Клавиатурная навигация:\r\n * Добавление и удаление строк при перемещении курсора вниз.\r\n */\r\n var lastActiveCell; // Вынесена тут, что бы в событиях addRow и deleteRow были актуальные данные, получаемые по этой ссылке.\r\n var needRestoreEditorAfterReload = false;\r\n\r\n grid.onKeyDown.subscribe(function (e, args) {\r\n var key = e.keyCode;\r\n var table = me._grid._table;\r\n if (!table || table.isDisabled()) return;\r\n var rows = table.rows.toArray();\r\n var lastRow = rows[rows.length - 1];\r\n lastActiveCell = [rows.length - 1, args.cell];\r\n var grid = me._grid.grid;\r\n\r\n // Что бы много раз не биндись, а вынести их события не получается, т.к. table появляется не сразу.\r\n if (me._bindedTables.indexOf('addRow' + me._grid.settings.DFMName) === -1) {\r\n //До добавления новой строки вызываем сохранение выбранного значения в текущем редакторе, что бы оно ушло в datasource и потом сохранилось в БД (замечание №103950).\r\n table.bind(table.class.EVENT.BEFORE_ROW_ADDED, () => {\r\n const editor = grid.getCellEditor();\r\n if (!!editor) {\r\n editor.commit();\r\n }\r\n });\r\n\r\n // Смещаем фокус на новую строку в ту же ячейку что и на предыдущей.\r\n table.bind(table['class'].EVENT.ROW_ADDED, function (row) {\r\n log.info('DETAILGRID', 'addRow event in EditPlugin'); \r\n lastActiveCell[0] = grid.getDataLength() - 1;\r\n grid.setActiveCell(lastActiveCell[0], lastActiveCell[1]); \r\n grid.editActiveCell(); \r\n //После добавления строки данные могут обновиться, поэтому востанавливаем редактируемую ячейку после загрузки данных.\r\n needRestoreEditorAfterReload = true;\r\n });\r\n\r\n me._bindedTables.push('addRow' + me._grid.settings.DFMName);\r\n }\r\n\r\n // Что бы много раз не биндись, а вынести их события не получается, т.к. table появляется не сразу.\r\n if (me._bindedTables.indexOf('deleteRow' + me._grid.settings.DFMName) === -1) {\r\n table.bind('deleteRow', function (row) {\r\n log.info('DETAILGRID', 'deleteRow event in EditPlugin');\r\n setTimeout(function () { //что бы не перескакивало 1 строку\r\n lastActiveCell[0] = grid.getDataLength() - 1;\r\n grid.setActiveCell(lastActiveCell[0], lastActiveCell[1]);\r\n grid.editActiveCell();\r\n\r\n //После удалении строки данные могут обновиться, поэтому востанавливаем редактируемую ячейку после загрузки данных.\r\n needRestoreEditorAfterReload = true;\r\n }, 100);\r\n });\r\n me._bindedTables.push('deleteRow' + me._grid.settings.DFMName);\r\n }\r\n\r\n // Что бы много раз не биндись, а вынести их события не получается, т.к. table появляется не сразу.\r\n if (me._bindedTables.indexOf('dataReloaded' + me._grid.settings.DFMName) === -1) {\r\n table.bind(table['class'].EVENT.DATA_RELOADED, function (row) {\r\n log.info('DETAILGRID', 'dataReloaded event in EditPlugin');\r\n if (needRestoreEditorAfterReload) { \r\n grid.setActiveCell(lastActiveCell[0], lastActiveCell[1]);\r\n grid.editActiveCell();\r\n needRestoreEditorAfterReload = false;\r\n }\r\n });\r\n me._bindedTables.push('dataReloaded' + me._grid.settings.DFMName);\r\n }\r\n\r\n if (key === $.ui.keyCode.DOWN) {\r\n if (args.row + 1 == grid.getDataLength()) {\r\n if (lastRow.hasFilledRequisites()) {\r\n table.addRow();\r\n }\r\n }\r\n }\r\n\r\n if (key === $.ui.keyCode.UP) {\r\n if (args.row + 1 == grid.getDataLength()) {\r\n if (!lastRow.hasFilledRequisites()) {\r\n lastRow.remove()\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Навешиваем события, чтобы при клике на таблицу добавлялась новая строка\r\n * @since 5.2.0.1303\r\n */\r\n WA.DetailsInit.done(function () {\r\n $(document).on('mouseup.editplugin', $.proxy(me._onFocusOrUnFocus, me));\r\n })\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * При фокусе на таблицу добавлем новую строку если таблица пустая и Удаляем созданную строку при потере фокуса\r\n * @since 5.2.0.1303\r\n */\r\n _onFocusOrUnFocus: function (e) {\r\n var me = this;\r\n\r\n var targetInExceptions = function (target) {\r\n var result = !!_(me._exceptions).find(function (ex) {\r\n return $(target).hasAncestor(ex).length\r\n });\r\n return result;\r\n }\r\n\r\n var container = $(me._grid.containerSelector);\r\n var target = e.target;\r\n\r\n // В IE10 c SVG работать надо не так как обычно https://stackoverflow.com/questions/33672395/use-within-svg-not-finding-closest-div-in-ie\r\n if (target.correspondingUseElement) {\r\n target = target.correspondingUseElement;\r\n\r\n // Поднимаемся до уровня оборачивающей svg div'ки. Тут target - use, target.parentNode - SvgElement.\r\n target = target.parentNode.parentNode;\r\n }\r\n\r\n //FIX #5667: В IE при нажатии на скролбар в выпадающем списке, снивается фокус с input и ставится на div с выпадающим списком, поэтому проверяем текущий зафокусированный элемент на исключения.\r\n\r\n if (!container.is(target) && !container.has(target).length && !targetInExceptions(target) && !targetInExceptions(document.activeElement)) {\r\n // Нажали мышкой не в область грида (focusout, blur).\r\n log.info('DETAILGRID', 'onBlur event in EditPlugin');\r\n\r\n // Если кликнули на другой грид (не текущий обрабатываемый) или вообще в пустое место, что бы текущий не сбросил key scope. \r\n window._needSetGridsKeyScope = window._needSetGridsKeyScope || false;\r\n\r\n var table = me._grid._table;\r\n if (!table || !table.rows) return;\r\n\r\n me._grid.grid.navigateUp();\r\n me._grid.grid.resetActiveCell();\r\n me._grid.grid.setSelectedRows([]);\r\n\r\n var rows = table.rows.toArray();\r\n var lastRow = rows[rows.length - 1];\r\n if (rows.length === 1 && lastRow && !lastRow.hasFilledRequisites()) {\r\n lastRow.remove();\r\n }\r\n // Убрать режим редактирования с текущей ячейки\r\n me._grid.grid.setActiveCell(null);\r\n me._grid.grid.setSelectedRows([]);\r\n\r\n me.isFocused = false;\r\n } else {\r\n //#108739 \r\n if ($(target).hasClass('rs_td') || $('.ui-datepicker').has($(target)).length || $('.contextmenu__item').has($(target)).length ||\r\n $(target).hasClass('rs_RefCaption') || $(target).hasClass('rs_results')) {\r\n return;\r\n }\r\n\r\n // Нажали мышкой в область грида (focusin, focus). \r\n // Кликнули на грид надо что бы key scope стал равен grid в любом случае (даже если другие гриды хотят поменять его на общий). \r\n window._needSetGridsKeyScope = true;\r\n\r\n // if (!me.isFocused) { // #108827\r\n log.info('DETAILGRID', 'onFocus event in EditPlugin');\r\n var table = me._grid._table;\r\n if (table && !table.isDisabled() && !table.rows.count()) table.addRow();\r\n\r\n me.isFocused = true;\r\n //}\r\n }\r\n\r\n // Устанавливаем область глобального обработчика горячих клавишь.\r\n // Через timeout, что бы остальные гридов не сбросили key scope.\r\n clearTimeout(window._setGridsKeyScopeTimeout);\r\n window._setGridsKeyScopeTimeout = setTimeout(function () {\r\n var globalKeyScope;\r\n\r\n if (window._needSetGridsKeyScope) {\r\n globalKeyScope = 'grid';\r\n } else {\r\n globalKeyScope = $('.ui-dialog').length ? 'baseDialog' : 'common';\r\n }\r\n key.setScope(globalKeyScope);\r\n\r\n window._needSetGridsKeyScope = false;\r\n }, 50);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Назначивание редакторов для колонок\r\n * @method WebAccess.components.dataViews.gridPlugins.EditPlugin#_onGridInit\r\n * @private\r\n * @since 5.2.0.1100\r\n */\r\n _onColumnInit: function (byref_column) {\r\n switch (+byref_column.type) {\r\n case REQUISITE_TYPE.STRING:\r\n byref_column.editor = function (args) {\r\n return new global._editors.StringEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.TEXT:\r\n byref_column.editor = function (args) {\r\n return new global._editors.TextEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.REFERENCE:\r\n byref_column.editor = function (args) {\r\n return new global._editors.ReferenceEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.PICK:\r\n byref_column.editor = function (args) {\r\n return new global._editors.PickEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.DATE:\r\n byref_column.editor = function (args) {\r\n return new global._editors.DateEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.LARGE_INTEGER:\r\n case REQUISITE_TYPE.INTEGER:\r\n byref_column.editor = function (args) {\r\n return new global._editors.IntegerEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.FLOAT:\r\n byref_column.editor = function (args) {\r\n return new global._editors.FloatEditor(args);\r\n };\r\n break;\r\n\r\n case REQUISITE_TYPE.DOCUMENT:\r\n byref_column.editor = function (args) {\r\n return new global._editors.DocumentEditor(args);\r\n };\r\n break;\r\n }\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n });\r\n\r\n})(WA.components.dataViews.gridPlugins);","(function gridDefenition(global) {\r\n \"use strict\";\r\n\r\n var ASTERISK = '*';\r\n\r\n /**\r\n * Таблица.\r\n *\r\n * @class WebAccess.components.dataViews.Grid\r\n * @extends BaseObject\r\n * @mixes WebAccess.mixins.pluginMixin\r\n * @since 5.2.0.1100\r\n * @param {string} containerSelector Селектор блока, содержащего таблицу\r\n * @param {WebAccess.components.dataViews.DataProvider} dataSource Класс, предоставляющий данные для таблицы\r\n * @param {Array} columns Список колонок таблицы\r\n * @param {Object} settings Дополнительные параметры\r\n * @property {dxGrid} dxGrid Ссылка на экземпляр таблицы\r\n * @property {object} state Объект, хранящий параметры текущей таблицы\r\n * @property {array} _table Cвязанный объект таблицы клиентской ОМ\r\n */\r\n global.components.dataViews.Grid = BaseObject.extend([global.mixins.pluginMixin], {\r\n _columns: [],\r\n settings: null,\r\n state: null,\r\n containerSelector: null,\r\n _queryDelay: null,\r\n _saveStateDelay: null,\r\n _table: null,\r\n\r\n /**\r\n * Провайдер данных для таблицы\r\n * @private\r\n */\r\n _dataSource: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (containerSelector, dataSource, columns, settings) {\r\n var me = this;\r\n\r\n log.info('GRID', 'Grid initialization');\r\n me.settings = {\r\n getRowAdditionalInfo: null, /*\r\n Формат этого свойства:\r\n function (rowNumber) {\r\n return {\r\n cssClasses: '',\r\n attributes: {}\r\n }\r\n }\r\n */\r\n cellTemplate: null,\r\n plugins: null\r\n };\r\n\r\n if (!dataSource) WA.raise(L('DATA_SOURCE_NOT_SET'));\r\n\r\n me._super(containerSelector, dataSource, columns);\r\n me._columns = [];\r\n\r\n $.extend(me.settings, settings);\r\n me.containerSelector = containerSelector;\r\n me._dataSource = dataSource;\r\n\r\n\r\n me._dataSource.loadState().always(function (state) {\r\n me.state = state || {};\r\n me._columns = me._initializeColumns(columns);\r\n\r\n //Списка видимых колонок может не быть в состоянии (профиле), поэтому означим их по данным колонок.\r\n if (!me.state.VisibleColumns || me.state.VisibleColumns.length == 0) {\r\n me.updateState({\r\n VisibleColumns: _(me.getVisibleColumns()).map(function (col) { return col.id; })\r\n });\r\n }\r\n\r\n // Событие для возможности модифицировать состоение грида, после его загрузки.\r\n me.fire(WA.CMP.DV.Grid.EVENT.STATE_LOADED);\r\n\r\n me._initializeGrid(containerSelector);\r\n })\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Связывает с таблицей API.\r\n * @method WebAccess.components.dataViews.Grid#setTable\r\n * @since 5.2.0.1100\r\n */\r\n setTable: function (table) {\r\n this._table = table;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает таблицу, связанную с текущей.\r\n * @method WebAccess.components.dataViews.Grid#getTable\r\n\t* @return {WebAccess.components.dataViews.Grid} Таблица.\r\n * @since 5.5.0.2703\r\n */\r\n getTable: function() {\r\n return this._table;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список колонок.\r\n * @method WebAccess.components.dataViews.Grid#getColumns\r\n * @since 5.4.0.1021\r\n * @return {Array} Список колонок.\r\n */\r\n getColumns: function () {\r\n return this._columns;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Изменяет колонки таблицы.\r\n *\r\n * @method WebAccess.components.dataViews.Grid#setColumns\r\n * @param {Array} newColumns Список колонок\r\n * @since 5.4.0.1021\r\n * @return {WebAccess.components.dataViews.Grid} Grid Таблица.\r\n */\r\n setColumns: function (newColumns) {\r\n var me = this;\r\n log.info('GRID', 'Updating columns');\r\n\r\n me._columns = newColumns;\r\n\r\n var nextVisibleColumns = me.getVisibleColumns();\r\n me.grid.setColumns(nextVisibleColumns);\r\n me.dataView.setColumns(nextVisibleColumns);\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список видимых колонок.\r\n * @method WebAccess.components.dataViews.Grid#getVisibleColumns\r\n * @since 5.2.0.1100\r\n * @return {Array} Список видимых колонок.\r\n */\r\n getVisibleColumns: function () {\r\n return _(_(this._columns).filter(function (column) {\r\n return column.visible;\r\n })).sortBy(function (column) {\r\n return column.index;\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация компоненты грида devExtreme\r\n * @method WebAccess.components.dataViews.Grid#_initializeGrid\r\n * @private\r\n * @since 5.2.0.1100\r\n * @return {WebAccess.components.dataViews.Grid} Grid\r\n */\r\n _initializeGrid: function () {\r\n var me = this;\r\n var columnFilters = {};\r\n\r\n var options = {\r\n //showHeaderRow: true, FIXME: Это не здесь должно задаваться и отсутствеие этого здесь ломает фильтрацию\r\n headerRowHeight: 36,\r\n rowHeight: 30,\r\n explicitInitialization: true,\r\n syncColumnCellResize: true,\r\n // enableColumnReorder: false, для отключения перетаскивания колонок в записях справочников, документах и диалогах\r\n // чтобы не было проблем при показе после скрытия.\r\n enableColumnReorder: WA.getLocation() === 'referencerecords'\r\n };\r\n\r\n me.dataView = new Slick.Data.DataView();\r\n\r\n var visColumns = me.getVisibleColumns();\r\n me.fire(WA.CMP.DV.Grid.EVENT.BEFORE_GRID_INIT, me.containerSelector, me.dataView, visColumns, options);\r\n\r\n // Означиваем метод для получения дополнительной информации о строке.\r\n if (me.settings.getRowAdditionalInfo) {\r\n me.dataView['getItemAdditionalMetadata'] = me.settings.getRowAdditionalInfo;\r\n }\r\n me.grid = new Slick.Grid(me.containerSelector, me.dataView, visColumns, options);\r\n me.grid._parent = me;\r\n\r\n me.fire(WA.CMP.DV.Grid.EVENT.GRID_INIT, me.grid);\r\n\r\n me.dataView.onRowCountChanged.subscribe(function (e, args) {\r\n me.grid.updateRowCount();\r\n me.grid.render();\r\n });\r\n\r\n me.dataView.onRowsChanged.subscribe(function (e, args) {\r\n me.grid.invalidateRows(args.rows);\r\n me.grid.render();\r\n });\r\n\r\n //При изменении порядка колонок некоторые колонки могут быть скрыты или добавлены, все происходит в одном месте,\r\n //поэтому требуется проследить чтобы данные о видимых колонках были актуальны.\r\n me.grid.onColumnsReordered.subscribe(function (ev, columns) {\r\n if (columns && columns.VisibleColumns) me.updateState({ VisibleColumns: columns.VisibleColumns }, true);\r\n });\r\n\r\n me.grid.onViewportChanged.subscribe(function (ev, args) {\r\n me.fire(WA.CMP.DV.Grid.EVENT.VIEWPORT_CHANGED);\r\n });\r\n\r\n me.grid.init();\r\n me.reloadData();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохраняет параметры таблицы.\r\n *\r\n\t* @method WebAccess.components.dataViews.Grid#updateState\r\n * @param {object} state Параметры\r\n * @param {boolean} opt_force Признак принудительного сохранения параметров\r\n * @since 5.2.0.1100\r\n * @return {WebAccess.components.dataViews.Grid} Таблица.\r\n */\r\n updateState: function (state, opt_force) {\r\n var me = this;\r\n\r\n log.info('GRID', 'Updating state');\r\n\r\n var prevState = me.state;\r\n var newState = $.extend({}, me.state, state);\r\n\r\n me.state = newState;\r\n\r\n //TODO Оптимизировать - не для каждого изменения состояния надо его сохранять. Например, при изменении номера страницы не надо.\r\n if ($.toJSON(newState) !== $.toJSON(prevState) || opt_force === true) {\r\n clearTimeout(me._saveStateDelay); //для сокращения запросов на сервер ВД.\r\n me._saveStateDelay = setTimeout(function () {\r\n me._dataSource.saveState(me.state, opt_force).done(function () {\r\n log.info('GRID', 'New state saved to userprofile');\r\n }).fail(function (err) {\r\n log.error(\"GRID\", \"Can't save state: \" + err);\r\n });\r\n }, 0);\r\n\r\n log.debug('GRID', 'New state is:' + $.toJSON(me.state));\r\n } else {\r\n log.debug('GRID', 'State not changed');\r\n }\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Загружает и обновляет таблицу с учетом переданных параметров.\r\n *\r\n * @param {object} options Параметры запроса\r\n * @method WebAccess.components.dataViews.Grid#reloadData\r\n * @since 5.2.0.1100\r\n * @return {Deferred} Deferred-объект.\r\n */\r\n reloadData: function (options) {\r\n var me = this;\r\n var result = $.Deferred();\r\n var jContainer = $(me.containerSelector);\r\n var fadeSpeed = 'fast';\r\n log.info('GRID', 'Reloading data');\r\n\r\n WA.CR.spinner && WA.CR.spinner.show();\r\n\r\n options = options || {};\r\n\r\n clearTimeout(me._queryDelay);\r\n me._queryDelay = setTimeout(function () {\r\n var fadeTO = setTimeout(function () { jContainer.fadeTo(fadeSpeed, .6); }, 500);\r\n\r\n var loadOptions = $.extend({}, me.state, options);\r\n me.updateState(loadOptions);\r\n\r\n log.info('GRID', 'Reloading data on timeout');\r\n me.fire(WA.CMP.DV.Grid.EVENT.BEFORE_DATA_LOADED, loadOptions);\r\n me._dataSource.load(loadOptions).done(function (data) {\r\n\r\n var pageIndex = data.PageIndex;\r\n var records = data.Rows;\r\n\r\n // Сохраняем новый номер страницы, т.к. она могла поменятся при переходе на последнюю страницу.\r\n me.updateState({ PageIndex: pageIndex });//fixme не его логика\r\n\r\n me.fire(WA.CMP.DV.Grid.EVENT.DATA_LOADED, pageIndex, !!records ? records.length : 0, records);\r\n\r\n me.dataView.setItems(records);\r\n me.grid.invalidate();\r\n me.dataView.endUpdate();\r\n\r\n me.fire(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, data);\r\n result.resolve(data);\r\n }).always(function () {\r\n clearTimeout(fadeTO);\r\n jContainer.fadeTo(fadeSpeed, 1);\r\n WA.CR.spinner && WA.CR.spinner.hide();\r\n });\r\n\r\n }, 100);\r\n\r\n return result;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Перевод колонок из формата серверного в формат понятный devExtreme\r\n * @private\r\n * @param {array} rawColumns Список колонок\r\n * @method WebAccess.components.dataViews.Grid#_initializeColumns\r\n * @since 5.2.0.1100\r\n * @return {array} Список колонок\r\n */\r\n _initializeColumns: function (rawColumns) {\r\n var me = this;\r\n var ALIGNMENT_RIGHT = 1;\r\n\r\n var columns = _(rawColumns).map(function (column) {\r\n var isSpecialColumn = (column.Name.charAt(0) === '_');\r\n\r\n var isRequired = column.IsRequired === true || column.IsRequired === 'True';\r\n\r\n var cssClass = (isSpecialColumn ? 'centered' : '');\r\n if (column.TextAlign == ALIGNMENT_RIGHT) cssClass += ' text_align_right';\r\n\r\n if (column.IsReadOnly) cssClass += ' readonly';\r\n\r\n var columnSettings = {\r\n name: (isRequired ? ASTERISK : '') + column.Caption,\r\n id: column.Name,\r\n field: column.Field,\r\n cssClass: cssClass,\r\n sortable: false,\r\n visible: column.IsVisible === true || column.IsVisible === 'True',\r\n resizable: false,\r\n width: +column.Width,\r\n index: column.Index,\r\n hint: column.Hint,\r\n type: column.Type,\r\n dateType: column.DateType,\r\n isRequired: isRequired,\r\n hasCalculation: column.HasCalculation === true || column.HasCalculation === 'True',\r\n isReadOnly: column.IsReadOnly === true || column.IsReadOnly === 'True',\r\n requisite: column.Requisite,\r\n precision: column.Precision\r\n };\r\n\r\n\r\n if (column.Type == REQUISITE_TYPE.DATE && WA.ENV.isTouch()) {\r\n columnSettings['minWidth'] = 90;\r\n };\r\n\r\n if (me.state.VisibleColumns && !isNaN(me.state.VisibleColumns.indexOf(column.Name)) && WA.getLocation() === 'referencerecords') {\r\n columnSettings['index'] = me.state.VisibleColumns.indexOf(column.Name);\r\n }\r\n\r\n // Шаблонизатор значений в ячейках.\r\n if (me.settings.cellTemplate) {\r\n columnSettings['formatter'] = me.settings.cellTemplate;\r\n }\r\n\r\n if (me.settings.asyncPostRender) {\r\n columnSettings['asyncPostRender'] = me.settings.asyncPostRender\r\n }\r\n\r\n if (me.settings.editor) {\r\n columnSettings['editor'] = me.settings.editor\r\n }\r\n\r\n me.fire(WA.CMP.DV.Grid.EVENT.COLUMN_INIT, columnSettings);\r\n return columnSettings;\r\n });\r\n\r\n return columns;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _excludeSpecialColumns: function (columns) {\r\n return _(columns).filter(function (column) {\r\n return (column.id != '_ContextMenu'\r\n && column.id != '_Checkbox'\r\n && column.id != '_SelectRecord');\r\n });\r\n },\r\n\r\n /**\r\n * Получает список колонок для выбора видимых колонок.\r\n *\r\n * @method WebAccess.components.dataViews.Grid#getColumnsForDialog\r\n * @since 5.2.0.1100\r\n * @return {array} Список колонок.\r\n */\r\n getColumnsForDialog: function () {\r\n var me = this;\r\n var columns = me._excludeSpecialColumns(_(this._columns).clone());\r\n this.fire(WA.CMP.DV.Grid.EVENT.GET_COLUMNS_FOR_DIALOG, columns);\r\n return columns;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список видимых колонок для выбора видимых колонок.\r\n\r\n * @method WebAccess.components.dataViews.Grid#getVisibleColumnsForDialog\r\n\t* @description В первый раз список получается из данных, которые пришли с сервера.\r\n * Если пользователь что-то выбирал, выборка колонок\r\n * делается на основе актуальных измененных данных dx-грида с учетом выбранных в\r\n * предыдущий раз видимых колонок.\r\n * @since 5.2.0.1100\r\n * @return {array} columns Список колонок.\r\n */\r\n getVisibleColumnsForDialog: function () {\r\n var me = this;\r\n var columns = me._excludeSpecialColumns(this.getVisibleColumns());\r\n this.fire(WA.CMP.DV.Grid.EVENT.GET_VISIBLE_COLUMNS_FOR_DIALOG, columns);\r\n return columns;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n setVisibleColumnsFromDialog: function (newColumns) {\r\n this.fire(WA.CMP.DV.Grid.EVENT.SET_VISIBLE_COLUMNS_FROM_DIALOG, newColumns);\r\n this.setVisibleColumns(newColumns);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавляет колонки в список видимых.\r\n *\r\n * @method WebAccess.components.dataViews.Grid#setVisibleColumns\r\n * @param {array} newColumns Список видимых колонок\r\n * @since 5.2.0.1100\r\n * @return {WebAccess.components.dataViews.Grid} Grid Таблица.\r\n */\r\n setVisibleColumns: function (newColumns) {\r\n var me = this;\r\n log.info('GRID', 'Updating visible columns');\r\n this.fire(WA.CMP.DV.Grid.EVENT.SET_VISIBLE_COLUMNS, newColumns);\r\n\r\n newColumns = me._excludeSpecialColumns(newColumns);\r\n var visibleIds = _(newColumns).map(function (c) { return c.id });\r\n\r\n me._columns = _(me._columns).map(function (column) {\r\n var isSpecialColumn = (column.id.charAt(0) === '_');\r\n var index = visibleIds.indexOf(column.id);\r\n if (index !== -1 || isSpecialColumn) {\r\n column.visible = true;\r\n column.index = index;\r\n } else {\r\n column.visible = false;\r\n if (WA.getLocation() === 'referencerecords') {\r\n column.index = 0;\r\n }\r\n }\r\n return column;\r\n });\r\n\r\n var visibleColumns = me.getVisibleColumns();\r\n for (let column of visibleColumns) {\r\n column.width = this.state.ColumnsWidth[ column.id ];\r\n }\r\n me.dataView.setColumns(visibleColumns);\r\n me.grid.setColumns(visibleColumns);\r\n\r\n me.reloadData({\r\n VisibleColumns: _(visibleColumns).pluck('id') || [],\r\n QueryInstanceID: generateUniqueID()\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрытие колонки при добавление группировки по ней\r\n * @private\r\n * @method WebAccess.components.dataViews.Grid#hideColumn\r\n */\r\n hideColumn: function (id) {\r\n log.debug('GRID', 'Hiding columns ' + id);\r\n var me = this;\r\n var columns = me.getVisibleColumns();\r\n var newColumns = _(columns).filter(function (col) {\r\n return id !== col.id;\r\n });\r\n\r\n me.setVisibleColumns(newColumns);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показ колонки при удалении группировки по ней\r\n * @private\r\n * @method WebAccess.components.dataViews.Grid#showColumn\r\n */\r\n showColumn: function (id, opt_index) {\r\n log.debug('GRID', 'Showing column ' + id);\r\n log.debug('GRID', 'Showing column index' + opt_index);\r\n var me = this;\r\n var columns = me._columns;\r\n var oldColumns = me.getVisibleColumns();\r\n\r\n var newColumn = _(me._columns).find(function (col) {\r\n return id == col.id;\r\n });\r\n\r\n if (newColumn) {\r\n oldColumns.splice(opt_index || 0, 0, newColumn);\r\n me.setVisibleColumns(oldColumns);//здесь порядок имеет значение из него строятся индексы\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @function isCurrentPeriodEnabled - функция получает текущее состояние фильтра по периоду.\r\n * @returns {boolean} - true - если фильтр по периоду включен, false - если фильтр по периоду отключен.\r\n */\r\n isCurrentPeriodEnabled: function () {\r\n return (typeof WA.CR.toolBar.buttons.ToggleCurrentPeriod === 'object' && WA.CR.toolBar.buttons.ToggleCurrentPeriod.isSelected());\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n }, {\r\n EVENT: {\r\n /**\r\n * Срабатывает после вызова конструктора.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.CLASS_INIT\r\n * @param {object} context ссылка на экземпляр класса\r\n */\r\n CLASS_INIT: 'classInit',\r\n\r\n /**\r\n * Срабатывает до инициализации таблицы.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.BEFORE_GRID_INIT\r\n * @param {string} containerSelector Селектор основного контейнера\r\n * @param {object} dataView Класс представления\r\n * @param {array} visibleColumns Список видимых колонок\r\n * @param {object} options Параметры таблицы\r\n */\r\n BEFORE_GRID_INIT: 'gridBeforeInit',\r\n\r\n /**\r\n * Срабатывает после запуска конструктора.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.GRID_INIT\r\n * @param {object} context ссылка на экземпляр класса\r\n */\r\n GRID_INIT: 'gridInit',\r\n\r\n /**\r\n * Срабатывает после инициализации таблицы перед загрузкой данных.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.BEFORE_DATA_LOADED\r\n * @param {object} state Параметры запроса\r\n */\r\n BEFORE_DATA_LOADED: 'beforeDataLoaded',\r\n\r\n /**\r\n * Срабатывает после загрузки данных.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.DATA_LOADED\r\n * @param {integer} pageIndex Номер страницы\r\n * @param {integer} count Количество записей таблицы\r\n * @param {array} records Полученные записи таблицы\r\n */\r\n DATA_LOADED: 'dataLoaded',\r\n\r\n /**\r\n * Срабатывает после загрузки данных и отображения их в таблице.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.AFTER_DATA_LOADED\r\n * @param {object} data Полученные данные\r\n */\r\n AFTER_DATA_LOADED: 'afterDataLoaded',\r\n\r\n /**\r\n * Срабатывает перед получением списка доступных колонок.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.GET_COLUMNS_FOR_DIALOG\r\n * @param {array} columns Список колонок\r\n */\r\n GET_COLUMNS_FOR_DIALOG: 'getColumnsForDialog',\r\n\r\n /**\r\n * Срабатывает перед получением списка видимых колонок.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.GET_VISIBLE_COLUMNS_FOR_DIALOG\r\n * @param {array} columns Список колонок\r\n */\r\n GET_VISIBLE_COLUMNS_FOR_DIALOG: 'getVisibleColumnsForDialog',\r\n\r\n /**\r\n * Срабатывает перед добавлением колонок в список видимых.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.GET_VISIBLE_COLUMNS_FOR_DIALOG\r\n * @param {array} columns Список колонок\r\n */\r\n SET_VISIBLE_COLUMNS: 'setVisibleColumns',\r\n\r\n /**\r\n * Срабатывает перед добавлением колонок в список видимых.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.GET_VISIBLE_COLUMNS_FOR_DIALOG\r\n * @param {array} columns Список колонок\r\n */\r\n SET_VISIBLE_COLUMNS_FROM_DIALOG: 'setVisibleColumnsFromDialog',\r\n\r\n /**\r\n * Срабатывает при переходе на страницу.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.PAGE_CHANGE\r\n * @param {integer} index Номер страницы\r\n */\r\n PAGE_CHANGE: 'pageChange',\r\n\r\n /**\r\n * Срабатывает при смене количества записей на странице.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.PAGE_CHANGE\r\n * @param {integer} limit Ограничение количества записей\r\n */\r\n PAGE_LIMIT_CHANGE: 'pageLimitChange',\r\n\r\n /**\r\n * Срабатывает при выделении записей.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.SELECTED_ROWS_CHANGED\r\n * @param {integer} limit Ограничение количества записей\r\n */\r\n SELECTED_ROWS_CHANGED: 'selectedRowsChanged',\r\n\r\n /**\r\n * Срабатывает при инициализации колонки.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.COLUMN_INIT\r\n * @param {object} column Колонка\r\n */\r\n COLUMN_INIT: 'columnInit',\r\n\r\n /**\r\n * Срабатывает после загрузки параметров таблицы.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.STATE_LOADED\r\n */\r\n STATE_LOADED: 'stateLoaded',\r\n\r\n /**\r\n * Срабатывает при смене отображаемых значений на экране.\r\n *\r\n * @event WebAccess.components.dataViews.Grid.EVENT.VIEWPORT_CHANGED \r\n */\r\n VIEWPORT_CHANGED: 'viewportChanged'\r\n }\r\n });\r\n\r\n})(window.WA);\r\n","\"use strict\";\r\n\r\n/**\r\n* Диалоговое окно.\r\n*\r\n* @class WebAccess.components.dialogs.BaseDialog\r\n* @since 5.0.0.4000\r\n* @extends BaseObject\r\n*\r\n* @property {string} id ИД диалогового окна\r\n* @property {string} name Номер набора данных\r\n* @property {string} title Заголовок модального диалога\r\n* @property {string} html Содержимое окна\r\n* @property {string} okText Подпись кнопки «OK»\r\n* @property {string} cancelText Подпись кнопки «Отмена»\r\n* @property {function} ok Функция обратного вызова, исполняется при нажатии на кнопку «OK»\r\n* @property {function} cancel Функция обратного вызова, исполняется при нажатии на кнопку «Отмена»\r\n* @property {integer} height Высота модального диалога\r\n* @property {integer} width Ширина модального диалога\r\n* @property {boolean} resizable Возможность изменения размеров окна\r\n* @property {boolean} modal Если значение равно False, то задний план затемняется\r\n* @property {boolean} enterOk Если значение равно True, при нажатии на ENTER срабатывает нажатие на кнопку «OK»\r\n* @property {boolean} isShowOkButton Отображать кнопку «ОК»\r\n* @property {boolean} isShowCancelButton Отображать кнопку «Отмена»\r\n* @property {boolean} isOpened Признак того, что окно уже открылось\r\n* @property {boolean} isSingleme Не открывать новое окно, если такое же окно открыто. Значение по умолчанию TRUE\r\n* @property {string} dialogClass Указанное имя класса будет добавлено к диалогу\r\n* @property {WebAccess.components.notifications.inlineHint} inlineHint Сообщение об ошибке, отображаемое на странице @since 5.0.0.7400\r\n*\r\n* @example\r\n* var dialog = new WebAccess.components.dialogs.BaseDialog();\r\n* dialog.setHtml(\"TestHTML\");\r\n* dialog.show();\r\n*\r\n* @example Создание собственных кнопок\r\n* var dialog = new WebAccess.components.dialogs.BaseDialog();\r\n* var myButton = { id: \"myButtonID\", text: \"Button\", click: myFunction };\r\n* dialog.modalWindowButtons.push(myButton);\r\n* dialog.show();\r\n*\r\n* @example Отображение сообщения об ошибке\r\n* var dialog = new WebAccess.components.dialogs.BaseDialog();\r\n* dialog.show();\r\n* dialog.inlineHint.showError('Этот диалог пока бесполезен');\r\n*/\r\n(function (global) {\r\n\r\n var BaseDialog = BaseObject.extend({\r\n init: function (settings) {\r\n var me = this;\r\n this.modalWindowButtons = [];\r\n this.id = new Date().getTime(); //timestamp\r\n this._super(settings);\r\n\r\n this._setKeyBindings();\r\n\r\n if ($.isPlainObject(settings)) {\r\n $.extend(this, settings);\r\n }\r\n\r\n var me = this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: 'BaseDialog',\r\n dialogClass: '',\r\n inlineHint: null,\r\n id: \"0\",\r\n modalWindowButtons: [],\r\n title: L(\"MODAL_DIALOG\"),\r\n html: L(\"MODAL_DIALOG_INITIAL_TEXT\"),\r\n okText: L(\"OK\"),\r\n cancelText: L(\"CANCEL\"),\r\n closeText: L(\"CLOSE\"),\r\n ok: function () { },\r\n cancel: function () { },\r\n height: 'auto',\r\n width: 'auto',\r\n minWidth: 350,\r\n resizable: false,\r\n modal: true,\r\n enterOk: true,\r\n onOpen: function () { },\r\n onClose: function () { },\r\n isShowOkButton: true,\r\n isShowCancelButton: false,\r\n closeOnEscape: true,\r\n keyScope: 'baseDialog',\r\n isSingleme: true,\r\n keyBindings: {},\r\n _jContent: null,\r\n _isFitted: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Задает сочетания глобальных горячих клавишь.\r\n * @private\r\n */\r\n _setKeyBindings: function () {\r\n var me = this;\r\n me.keyBindings = {\r\n \"enter\": function (e) {\r\n if (e && $(e.target).is('.ui-dialog-titlebar-close')) return;\r\n $(\"#modal_ok_button_\" + me.id).click();\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * Показывает иконку прогресса при выполнении длительной операции.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#setSpinner\r\n * @param {String} [opt_text] текст диалога\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n setSpinner: function (opt_text) {\r\n this.setTitle(L('PLEASE_WAIT'));\r\n\r\n var spinnerHtml = '
    {1}';\r\n\r\n if (opt_text)\r\n spinnerHtml = format(spinnerHtml, \"ui-dialog__spinner_right\", opt_text);\r\n else\r\n spinnerHtml = format(spinnerHtml, \"ui-dialog__spinner_centered\", \"\");\r\n\r\n this.setHtml(spinnerHtml);\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаляет кнопки «ОК» и «Отмена» с формы диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#removeDefaultButtons\r\n * @since 5.0.0.7200\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n removeDefaultButtons: function () {\r\n this.isShowOkButton = false;\r\n this.isShowCancelButton = false;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрывает кнопку закрытия диалога.\r\n * @method WebAccess.components.dialogs.BaseDialog#removeCloseButton\r\n * @since 5.2.0.1931\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n removeCloseButton: function () {\r\n if (this.isOpened())\r\n $('#dialog_content_' + this.id).parent().parent().find(\".ui-dialog-titlebar-close\").remove();\r\n else\r\n this.bind(this['class'].EVENT.AFTER_OPEN, this.removeCloseButton);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включает отображение кнопки \"Отмена\".\r\n * @method WebAccess.components.dialogs.BaseDialog#showCancelButton\r\n * @since 5.2.0.1300\r\n * @todo: Реализовать до конца\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n showCancelButton: function () {\r\n this.isShowCancelButton = true;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Задает ширину окна.\r\n * @method WebAccess.components.dialogs.BaseDialog#setWidth\r\n * @param {integer} width Ширина в пикселях\r\n * @since 5.2.0.1300\r\n * @todo: Реализовать до конца\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n setWidth: function (width) {\r\n var me = this;\r\n me.width = width;\r\n if (me._jContent) {\r\n me._jContent.dialog(\"option\", \"width\", width);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Задает высоту окна.\r\n * @method WebAccess.components.dialogs.BaseDialog#setWidth\r\n * @param {integer} height Высота в пикселях\r\n * @since 5.2.0.1300\r\n * @todo: Реализовать до конца\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n setHeight: function (height) {\r\n var me = this;\r\n me.height = height;\r\n if (me._jContent) {\r\n me._jContent.dialog(\"option\", \"height\", height);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Задает заголовок окна.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#setTitle\r\n * @param {string} title Заголовок окна\r\n * @since 5.0.0.5000\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n setTitle: function (title) {\r\n this.title = title;\r\n if (this.isOpened()) $('#dialog_content_' + this.id).parents(\".ui-dialog\").find(\".ui-dialog-title\").html(title);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет, открыто ли диалоговое окно.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#isOpened\r\n * @since 5.0.0.5000\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n isOpened: function () {\r\n return ($('#dialog_content_' + this.id).length) > 0;\r\n },\r\n\r\n /**\r\n * Очищает содержимое окна.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#clear\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n clear: function () {\r\n this.setHtml('');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает содержимое диалогового окна.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#setHtml\r\n * @param {string} html Содержимое окна – текст html-разметки\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n setHtml: function (html) {\r\n this.html = html;\r\n if (this.isOpened()) $('#dialog_content_' + this.id).html(this.html);\r\n this._placeInCenter();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установка сочетаний клавиш, для текущего окна.\r\n * @private\r\n */\r\n _setupKeyScope: function () {\r\n var me = this;\r\n\r\n for (var keyName in me.keyBindings) {\r\n key(keyName, me.keyScope, me.keyBindings[keyName]);\r\n }\r\n\r\n key.setScope(me.keyScope);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку доступной.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#enableButton\r\n * @param {string} buttonId ИД кнопки, например, \"modal_ok_button\",\"modal_cancel_button\"\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n enableButton: function (buttonId) {\r\n if (!!buttonId) {\r\n $(\"#\" + buttonId + \"_\" + this.id).attr('disabled', false).removeClass(\"disabled\");\r\n $(\"#\" + buttonId).attr('disabled', false).removeClass(\"disabled\");\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку недоступной.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#disableButton\r\n * @param {string} buttonId ИД кнопки, например, \"modal_ok_button\",\"modal_cancel_button\"\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n disableButton: function (buttonId) {\r\n if (!!buttonId) {\r\n $(\"#\" + buttonId + \"_\" + this.id).attr('disabled', true).addClass(\"disabled\");\r\n $(\"#\" + buttonId).attr('disabled', true).addClass(\"disabled\");\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Изменяет свойства кнопки с указанным ИД.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#changeButton\r\n * @param {string} buttonId ИД кнопки, например \"modal_ok_button\",\"modal_cancel_button\"\r\n * @param {object} params Новые свойства кнопки\r\n */\r\n changeButton: function (buttonId, params) {\r\n var me = this;\r\n\r\n var button = _.findWhere(me.modalWindowButtons, { id: buttonId });\r\n if (button) {\r\n _.each(_.keys(params), function (key) {\r\n button[key] = params[key];\r\n });\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Перерисовывает кнопки в диалоге из dialog.modalWindowButtons.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#updateButtons\r\n */\r\n updateButtons: function () {\r\n var me = this;\r\n me._jDialog.dialog('option', 'buttons', me.modalWindowButtons);\r\n },\r\n\r\n /**\r\n * Добавляет иконку к кнопке.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#addButtonIcon\r\n * @param {string} buttonId ИД кнопки, например \"modal_ok_button\",\"modal_cancel_button\"\r\n * @param {string} iconClass Класс иконки (jQuery UI)\r\n */\r\n addButtonIcon: function (buttonId, iconClass) {\r\n var me = this;\r\n me.changeButton(buttonId, { icons: { primary: iconClass, secondary: null } });\r\n me.updateButtons();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаляет иконку у указанной кнопки.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#removeButtonIcon\r\n * @param {string} buttonId ИД кнопки, например, \"modal_ok_button\",\"modal_cancel_button\"\r\n */\r\n removeButtonIcon: function (buttonId) {\r\n var me = this;\r\n me.changeButton(buttonId, { icons: { primary: null, secondary: null } });\r\n me.updateButtons();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Переводит кнопку в состояние ожидания (со спиннером).\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#enableButtonWaitState\r\n * @param {string} buttonId ИД кнопки, например, \"modal_ok_button\",\"modal_cancel_button\"\r\n * @param {string} waitText Текст для отображения на кнопке\r\n */\r\n enableButtonWaitState: function (buttonId, waitText) {\r\n var me = this;\r\n var button = _.findWhere(me.modalWindowButtons, { id: buttonId });\r\n if (button) {\r\n button.originalText = button.text;\r\n if (waitText)\r\n button.text = waitText;\r\n me.addButtonIcon(buttonId, 'ui-wait-spinner');\r\n\r\n me.disableButton(buttonId);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Возвращает кнопку в нормальное состояние.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#disableButtonWaitState\r\n * @param {string} buttonId ИД кнопки, например, \"modal_ok_button\",\"modal_cancel_button\"\r\n */\r\n disableButtonWaitState: function (buttonId) {\r\n var me = this;\r\n var button = _.findWhere(me.modalWindowButtons, { id: buttonId });\r\n if (button) {\r\n if (button.orginalText)\r\n button.text = button.originalText;\r\n me.removeButtonIcon(buttonId);\r\n me.enableButton(buttonId);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавляет иконку справки на форму диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#addHelpIcon\r\n * @param {boolean} isCustomDlg признак является ли диалог пользовательским.\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n * @since 5.0.0.7300\r\n */\r\n addHelpIcon: function (isCustomDlg) {\r\n let wnd = this._getDialogTitleBar(isCustomDlg);\r\n if (wnd && wnd.length > 0) {\r\n if (wnd.find('.DialogHelpIco').length === 0) {\r\n wnd.append('');\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает заголовок окна диалога.\r\n * @private\r\n */\r\n _getDialogTitleBar: function (isCustomDlg) {\r\n let wnd = this._jDialog;\r\n if (wnd && wnd.length > 0) {\r\n if (isCustomDlg !== true) {\r\n wnd = wnd.parent().find('.ui-dialog-titlebar');\r\n }\r\n }\r\n return wnd;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показывает иконку справки на форме диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.BaseDialog#showHelpIcon\r\n * @param {boolean} isCustomDlg признак является ли диалог пользовательским.\r\n * @param {string} contextId ид текущего контекста для получения ссылки на внешнюю справку.\r\n * @since 5.8.0.9008\r\n */\r\n showHelpIcon: function (isCustomDlg, contextId) {\r\n let wnd = this._getDialogTitleBar(isCustomDlg);\r\n let icon = wnd.find('.DialogHelpIco');\r\n if (!!window['g_ModalWindowExtHelpLinks'] && g_IsExtHelpAvailable) {\r\n // Сбрасываем click на иконку Справки и запрещаем дальнейшую инициализацию в Core\r\n icon.off('click').addClass('inited').attr('title', L('HELP'));\r\n\r\n const helpLinks = window['g_ModalWindowExtHelpLinks'][contextId];\r\n if (helpLinks) {\r\n let lastHelpLink;\r\n let menuItems = [];\r\n for (helpLink in helpLinks) {\r\n lastHelpLink = helpLink;\r\n let currentLink = helpLinks[helpLink];\r\n let click = ((_currentLink) => {\r\n return () => {\r\n window.open(_currentLink);\r\n };\r\n })(currentLink);\r\n menuItems.push({\r\n text: helpLink,\r\n onClick: click,\r\n });\r\n };\r\n if (menuItems.length > 0) {\r\n menuItems[menuItems.length - 1].separator = true;\r\n }\r\n\r\n if (menuItems.length === 1) {\r\n icon.on('click', () => {\r\n window.open(lastHelpLink);\r\n });\r\n } else {\r\n let menu = new ContextMenu(menuItems);\r\n $(icon).contextMenu(menu, \"click\");\r\n }\r\n };\r\n }\r\n icon.show();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n onOK: function (callback) {\r\n this.ok = WA.TCD(callback);\r\n return this;\r\n },\r\n\r\n onCancel: function (callback) {\r\n this.cancel = WA.TCD(callback);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показывает диалоговое окно.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#show\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n show: function () {\r\n var me = this;\r\n\r\n //скрывать все календари\r\n $('.ui-datepicker').hide();\r\n\r\n if (me.isSingleme && $(\"div#dialog_content_\" + me.id).length > 0) return me;\r\n\r\n var existingButtons = [];\r\n for (var i = 0; i < me.modalWindowButtons.length; i++) {\r\n existingButtons.push(me.modalWindowButtons[i].id);\r\n if (me.modalWindowButtons[i].closeDialog === undefined || !!me.modalWindowButtons[i].closeDialog) {\r\n me.modalWindowButtons[i].click = me.modalWindowButtons[i].click.override(function () {\r\n var res = this.superFunction();\r\n if (res === false) { return res; }\r\n $(this).dialog(\"close\");\r\n $(this).remove();\r\n return res;\r\n });\r\n me.modalWindowButtons[i]['data-name'] = me.modalWindowButtons[i].id;\r\n }\r\n }\r\n\r\n if (me.isShowOkButton) {\r\n if (existingButtons.indexOf(\"modal_ok_button_\" + me.id) === -1)\r\n me.modalWindowButtons.push({\r\n id: \"modal_ok_button_\" + me.id,\r\n text: me.okText,\r\n click: function () { if (me.ok(this) === false) { return; } $(this).dialog(\"close\"); $(this).remove(); },\r\n 'class': 'primary',\r\n 'data-name': 'OkButton'\r\n });\r\n }\r\n if (me.isShowCancelButton) {\r\n if (existingButtons.indexOf(\"modal_cancel_button_\" + me.id) === -1)\r\n me.modalWindowButtons.push({\r\n id: \"modal_cancel_button_\" + me.id,\r\n text: me.cancelText,\r\n click: function () { if (me.cancel(this) === false) { return; } $(this).dialog(\"close\"); $(this).remove(); },\r\n 'data-name': 'CancelButton'\r\n });\r\n }\r\n\r\n /**\r\n * При нажатии на OK вызовем соответствующее событие, для этого\r\n * задекорируем существующу функцию и добавим немного своей логики\r\n * @ignore\r\n */\r\n me.ok = me.ok.override(\r\n function () {\r\n me.fire(\"ok\");\r\n return this.superFunction();\r\n }\r\n );\r\n\r\n if (me.cancel) {\r\n me.cancel = me.cancel.override(\r\n function () {\r\n me.fire(\"cancel\");\r\n return this.superFunction();\r\n });\r\n }\r\n\r\n $(\"div#dialog_content_\" + me.id).parent(\"div\").remove();\r\n\r\n me._jDialog = $('
    ', { html: '
    ' + me.html + '
    ' });\r\n\r\n var globalPrevBeforeUnloadFunc = null;\r\n var globalPrevFormVal = '';\r\n me._jContent = me._jDialog.dialog({\r\n zIndex: 1000,\r\n title: me.title,\r\n resizable: me.resizable,\r\n height: me.height,\r\n width: me.width,\r\n modal: me.modal,\r\n dialogClass: me.dialogClass,\r\n closeText: me.closeText,\r\n open: function () {\r\n // Сохраняем предыдущее состояние формы, что бы при закрытии диалога восстановить это значение.\r\n globalPrevFormVal = window['g_prevFormVal'];\r\n globalPrevBeforeUnloadFunc = window.onbeforeunload;\r\n\r\n if (me.height == 'auto') {\r\n if (me._jDialog.height() > $(window).height() * 0.8) {\r\n var optimalHeight = Math.round(0.8 * windowHeight());\r\n me._jDialog.dialog(\"option\", \"height\", optimalHeight);\r\n me._isFitted = true;\r\n }\r\n }\r\n\r\n me.inlineHint = new WA.CMP.NTF.InlineHint({}, me.id);\r\n me._setupKeyScope();\r\n hideAllPopups();\r\n me.fire(\"show\");\r\n me.fire(me['class'].EVENT.AFTER_OPEN, me);\r\n if (me.onOpen) me.onOpen();\r\n AdjustDialogIfIpad(me.width);\r\n var buttons = me._jDialog.next();\r\n InitHoverForButtons(buttons);\r\n me._jDialog.find('.ui-dialog-content').css('overflow', 'auto');\r\n me._jDialog.css(\"min-width\", me.minWidth);\r\n me._placeInCenter();\r\n $(window).on(\"resizeEnd.BaseDialog\", function () {\r\n me._placeInCenter();\r\n });\r\n },\r\n autoOpen: true,\r\n beforeClose: function (event) {\r\n if (me.fire(me['class'].EVENT.BEFORE_CLOSE, me) === false) return false;\r\n if (event.keyCode === $.ui.keyCode.ESCAPE) {\r\n if (me.closeOnEscape) {\r\n me.bind(me['class'].EVENT.AFTER_CLOSE, function (event) {\r\n // После закрытия по esc вызываем destroy, чтобы удалить диалог, а не просто скрыть\r\n me._jContent.dialog('destroy');\r\n });\r\n }\r\n return (me.fire(me['class'].EVENT.BEFORE_CLOSE_BY_ESCAPE, me) !== false);\r\n }\r\n },\r\n close: function () {\r\n $(window).off(\"resizeEnd.BaseDialog\");\r\n if (me.onClose) me.onClose();\r\n //clearAllModalDivs();\r\n hideAllPopups();\r\n me.fire(me['class'].EVENT.AFTER_CLOSE, me);\r\n key.setScope('common');\r\n // Восстанавливаем предыдущее состояние формы, если еще надо.\r\n if (window.onbeforeunload) {\r\n window['g_prevFormVal'] = globalPrevFormVal;\r\n window.onbeforeunload = globalPrevBeforeUnloadFunc;\r\n }\r\n },\r\n buttons: me.modalWindowButtons,\r\n closeOnEscape: me.closeOnEscape\r\n });\r\n\r\n me.addHelpIcon();\r\n me._setStatisticsClasses();\r\n\r\n me.fire('OnAfterOpen');\r\n\r\n me._jContent.parent().find(\".ui-dialog-titlebar-close\").off('click').on('click', function () {\r\n if (me.fire(me['class'].EVENT.BEFORE_CLOSE_BY_CROSS, me) !== false) {\r\n me.close();\r\n };\r\n });\r\n\r\n return me;\r\n },\r\n\r\n // Смещение диалога в центр экрана.\r\n _placeInCenter: function () {\r\n var jDialog = $('#dialog_content_' + this.id).parent();\r\n jDialog.parent().position({\r\n my: \"center center\",\r\n at: \"center center\",\r\n of: window\r\n });\r\n },\r\n\r\n /**\r\n * Добавление классов для клиентской статистики.\r\n * @function WebAccess.components.dialogs.BaseDialog#close\r\n * @return {WebAccess.components.dialogs.BaseDialog}\r\n * @private\r\n */\r\n _setStatisticsClasses: function () {\r\n // Для статистики.\r\n var jModalWindowContainer = this._jContent.parents('.ui-dialog').addClass(\"stat_ModalWindow_\" + this.className).attr(\"data-stataction\", 'ModalWindow');\r\n jModalWindowContainer.find('.ui-dialog-titlebar').addClass('stat_Title');\r\n jModalWindowContainer.find('.ui-dialog-titlebar-close').attr('data-name', 'CloseIcon');\r\n jModalWindowContainer.find('.DialogHelpIco').attr('data-name', 'HelpIcon');\r\n jModalWindowContainer.find('.ui-dialog-content').addClass('stat_Content');\r\n jModalWindowContainer.find('.ui-dialog-buttonpane').addClass('stat_Buttons');\r\n },\r\n\r\n /**\r\n * Закрывает диалоговое окно.\r\n *\r\n * @function WebAccess.components.dialogs.BaseDialog#close\r\n * @return {WebAccess.components.dialogs.BaseDialog} Объект типа BaseDialog.\r\n */\r\n close: function () {\r\n if (!!this._jContent) {\r\n //просто close не удаляет верстку, а только прячет\r\n //поэтому вызываем destroy\r\n //но close тоже нужен, иначе не отрабатывают события\r\n this._jContent.dialog('close');\r\n this._jContent.dialog('destroy');\r\n }\r\n return this;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n },\r\n {\r\n EVENT: {\r\n\r\n /**\r\n * Срабатывает перед закрытием модального окна.\r\n * Можно предотвратить закрытие диалога, вернув false в обработчике события.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.BEFORE_CLOSE\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n BEFORE_CLOSE: 'beforeClose',\r\n\r\n /**\r\n * Срабатывает перед закрытием модального окна от нажатия кнопки Escape.\r\n * Можно предотвратить закрытие диалога, вернув false в обработчике события.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.BEFORE_CLOSE_BY_ESCAPE\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n BEFORE_CLOSE_BY_ESCAPE: 'escapeClose',\r\n\r\n /**\r\n * Срабатывает перед закрытием модального окна от нажатия на крестик в заголовке окна.\r\n * Можно предотвратить закрытие диалога, вернув false в обработчике события.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.BEFORE_CLOSE_BY_CROSS\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n BEFORE_CLOSE_BY_CROSS: 'crossClose',\r\n\r\n /**\r\n * Срабатывает после закрытия диалогового окна.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.AFTER_CLOSE\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n\r\n AFTER_CLOSE: 'close',\r\n\r\n /**\r\n * Срабатывает перед закрытием модального окна.\r\n * Можно предотвратить закрытие диалога, вернув false в обработчике события.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.AFTER_OPEN\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n AFTER_OPEN: 'open',\r\n\r\n /**\r\n * Срабатывает после закрытия модального окна по кнопке ОК.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.AFTER_CLOSE_BY_OK\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1600\r\n */\r\n AFTER_CLOSE_BY_OK: 'ok',\r\n\r\n /**\r\n * Срабатывает после закрытия модального окна по кнопке Отмена.\r\n * @event WebAccess.components.dialogs.BaseDialog.EVENT.AFTER_CLOSE_BY_OK\r\n * @param {WebAccess.components.dialogs.BaseDialog} dialog экземпляр диалога\r\n * @since 5.2.0.1934\r\n */\r\n AFTER_CLOSE_BY_CANCEL: 'cancel'\r\n }\r\n });\r\n\r\n global.BaseDialog = BaseDialog;\r\n})(window.WebAccess.components.dialogs);\r\n","\"use strict\";\r\n\r\n/**\r\n * Параметры элемента множественного выбора.\r\n *\r\n * @typedef {Object} WebAccess.components.dialogs.BaseMultiSelect.multiSelectItem\r\n * @property {string} id Идентификатор элемента формы\r\n * @property {string} name Заголовок элемента формы. Значение поля обязательно должно быть установлено\r\n * @since 5.0.0.4211\r\n *\r\n * @example\r\n * var items = [\r\n * { \"name\": \"Пункт 1\", \"id\": 1 },\r\n * { \"name\": \"Пункт 2\", \"id\": 2 }\r\n * ];\r\n * multiDialog = new WebAccess.components.dialogs.SelectableMultiSelect(items);\r\n * multiDialog.show();\r\n */\r\n\r\n/**\r\n* Диалог множественного выбора.\r\n*\r\n* Принимает два объекта-массива, второй из которых является опциональным.\r\n* Во время работы не исключено изменение, добавление или удаление атрибутов или содержимого массивов.\r\n* Поведение событий диалога ok и selectComplete отднотипно.\r\n* Отличие в том, что событие ok срабатывает, если объекты для множественного выбора не меняются.\r\n*\r\n* @class WebAccess.components.dialogs.BaseMultiSelect\r\n* @extends WebAccess.components.dialogs.BaseDialog\r\n\r\n* @param {array} availableItems Список доступных элементов, в том числе элементы, которые были выбраны. Отображается в левой части окна\r\n* @param {array} [opt_selectedItems] Список выбранных элементов. Отображается в правой части окна\r\n* @param {object} [opt_settings] Настройки модального окна\r\n* @property {string} className Имя текущего класса\r\n* @property {boolean} isReadonly Признак того, что содержимое недоступно для изменения\r\n* @property {string} defaultRecordIcon Иконка элемента списка доступных элементов\r\n* @property {string} defaultMarkedRecordIcon Иконка выбранного элемента\r\n* @property {string} isSelectionChanged Признак того, что список выбранных элементов изменился\r\n* @property {string} filterPlaceholder Текст подсказки для фильтрации\r\n* @property {string} filteredItemsEmptyPlaceholder Текст, отображаемый в случае, если после фильтрации элементы отсутствуют в списке\r\n* @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED – заданы не все обязательные параметры.\r\n* @since 5.0.0.4000\r\n* @example\r\n* var items = [{id:\"1\", name: \"firstItem\"},\r\n* {id:\"2\", name: \"secondItem\"}];\r\n* var dialog = new WebAccess.components.dialogs.BaseMultiSelect(items);\r\n* dialog.bind(\"ok\", function(data) {console.log(data);});\r\n* dialog.show();\r\n*/\r\n(function (global) {\r\n var BaseMultiSelect = global.BaseDialog.extend({\r\n\r\n title: L(\"MODAL_DIALOG_SELECT_ITEMS\"),\r\n width: 925,\r\n height: 450,\r\n availableItemslabel: L(\"MODAL_DIALOG_ALL_ITEMS\"),\r\n selectedItemslabel: L(\"MODAL_DIALOG_SELECTED_ITEMS\"),\r\n filterPlaceholder: L(\"MODAL_DIALOG_SEARCH_IN_ITEMS\"),\r\n filteredItemsEmptyPlaceholder: L(\"MODAL_DIALOG_NO_ITEMS\"),\r\n\r\n className: \"BaseMultiSelect\",\r\n\r\n isReadonly: false,\r\n defaultRecordIcon: \"referenceRecord-16\",\r\n defaultMarkedRecordIcon: \"referenceRecordSelected-16\",\r\n isSelectionChanged: false,\r\n\r\n _html: \"\",\r\n _navigationKeyCodes: [27, 9, 13, 37, 38, 39, 40],\r\n _handlers: {},\r\n _jSelectedItemsTable: null,\r\n _jAvailableItemsList: null,\r\n _lastFilterValue: null,\r\n _displayOptions: false,\r\n _datatable: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (availableItems, opt_selectedItems, opt_settings) {\r\n var instance = this;\r\n\r\n if (!availableItems) WebAccess.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n this.availableItems = availableItems;\r\n this.selectedItems = opt_selectedItems || [];\r\n\r\n this._super(opt_settings);\r\n\r\n /** @this - здесь, это элемент над которым производятся манипуляции, а не контекст класса BaseMultiSelect; */\r\n /** Когда курсор мыши убежал с элемента из области выбранных записей */\r\n this._handlers._hoverItem = function (event) {\r\n instance._hoverItem(this);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** Когда курсор мыши убежал с элемента из области выбранных записей */\r\n this._handlers._unhoverItem = function (event) {\r\n instance._unhoverItem(this);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** Выбор элемента и перемещение его в список выбранных. */\r\n this._handlers.selectItem = function (event) {\r\n if (!instance.isReadonly) {\r\n var item = $(this);\r\n var id = item.attr('id');\r\n var field = item.attr('field');\r\n var name = item.find('.recordlist-item__name').text();\r\n\r\n var newItem = {\r\n id: id,\r\n name: '' + name,\r\n field: '' + field\r\n };\r\n\r\n instance._addItemToSelectedItems([newItem]);\r\n instance.fire(\"itemSelect\", newItem);\r\n }\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** Фильтрация записей в левой части */\r\n this._handlers.keyPressEventHandler = function (event) {\r\n this._jAvailableItemsList = $('#recordsList');\r\n if ($.inArray(event.keyCode, instance._navigationKeyCodes) > -1) {\r\n\r\n if (event.keyCode == 9) {\r\n $(this).blur();\r\n var firstItem = this._jAvailableItemsList.find('div.item:visible:first');\r\n if (firstItem.hasClass('item')) firstItem.addClass(\"over\");\r\n\r\n this._jAvailableItemsList.scrollTop(0);\r\n return false;\r\n }\r\n //me._NavigationKeyPressHandler(ev);\r\n } else {\r\n var placeholder = this._jAvailableItemsList.find(\"#empty-with-filter\");\r\n\r\n var term = $(this).val();\r\n this._jAvailableItemsList.find(\"div.item\").show().not(\":Contains('\" + term + \"')\").hide();\r\n\r\n if (this._jAvailableItemsList.find(\"div.item:visible\").length === 0) {\r\n placeholder.removeClass(\"hidden\");\r\n } else {\r\n placeholder.addClass(\"hidden\");\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n this._handlers.upDownKeyNavigation = function (down) {\r\n this._jAvailableItemsList = $('#recordsList');\r\n var currentItem = instance._jAvailableItemsList.find('div.item.over:visible');\r\n if (currentItem.length) {\r\n // от текущего элемента делаем поиск в 3-х направлениях: в дочерних элементах, в следующих элементах на уровень выше и в элементах того же уровня\r\n var nextItem;\r\n if (down) {\r\n nextItem = currentItem.find('.item:visible:first,.recordGroup:visible:first').first();\r\n if (nextItem.length === 0) { // если не нашли внизу\r\n nextItem = instance._findSiblingOrParent(currentItem, down);\r\n }\r\n if (nextItem.html() === currentItem.parent().html()) {\r\n nextItem = currentItem;\r\n }\r\n }\r\n else {\r\n nextItem = instance._findSiblingOrParent(currentItem, down);\r\n }\r\n if (nextItem.length) {\r\n currentItem.hasClass('item') ? instance._unhoverItem(currentItem) : instance.UnhoverGroup(currentItem);\r\n nextItem.hasClass('item') ? instance._hoverItem(nextItem) : me.HoverGroup(nextItem);\r\n instance._scrollListToHoveredItem(nextItem, down);\r\n }\r\n }\r\n else {\r\n var jItem;\r\n\r\n if (down) {\r\n jItem = instance._jAvailableItemsList.find('.item:visible:first,.recordGroup:visible:first').first();\r\n jItem.hasClass('item') ? instance._hoverItem(jItem) : instance.HoverGroup(jItem);\r\n instance.recordsList.scrollTop(0);\r\n }\r\n else {\r\n jItem = instance._jAvailableItemsList.find('.item:visible:last,.recordGroup:visible:last').last();\r\n jItem.hasClass('item') ? instance._hoverItem(jItem) : instance.HoverGroup(jItem);\r\n instance.recordsList.scrollTop(100000);\r\n }\r\n }\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n this._handlers.rightArrowKeyPress = function () {\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n this._handlers.leftArrowKeyPress = function () {\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n this._handlers.deleteKeyPress = function () {\r\n this._jSelectedItemsTable = $('#selectedRecordsScrollArea').find('table');\r\n var idToRemove = instance._jAvailableItemsList.find('.item.over').attr('id');\r\n if (idToRemove) {\r\n var rowDeleteButton = instance._jSelectedItemsTable.find('tr[id=' + idToRemove + ']').find('.removeFromSelect');\r\n instance.deleteItemFromSelectedItemsTable(rowDeleteButton);\r\n }\r\n };\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** Вернем все, что навыбирали в ok callback, и еще выбросим событие с выбранными данными\r\n * @ignore\r\n */\r\n this.ok = this.ok.override(\r\n function () {\r\n instance.fire(\"ok\", instance.selectedItems);\r\n if (this.isSelectionChanged) instance.fire(\"selectComplete\", instance.selectedItems);\r\n this.superFunction(instance.selectedItems);\r\n }\r\n );\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создание html разметки и контейнеров\r\n * @private\r\n */\r\n _preInit: function () {\r\n this._prepareAvailableItemsArea();\r\n this._prepareSelectedItemsArea();\r\n },\r\n\r\n /**\r\n * Иницииализация jQuery объектов и навешивание на них событий,\r\n * функция вызывается когда модальное окно и все его элементы загружены.\r\n * @private\r\n */\r\n _postInit: function () {\r\n this._jSelectedItemsTable = $('#selectedRecordsScrollArea').find('table');\r\n this._jAvailableItemsList = $('#recordsList');\r\n this._jFilterInput = $('#filterInput');\r\n this._initEvents();\r\n\r\n this._markSelectedItemsInAvailableItemsList();\r\n this._fixSelectedItemsTableBorder();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подготовка области с доступными записями\r\n * @private\r\n */\r\n _prepareAvailableItemsArea: function () {\r\n var renderedItems = \"\";\r\n for (var i = 0, l = this.availableItems.length; i < l; i++) {\r\n this.availableItems[i][\"default_icon\"] = this.defaultRecordIcon;\r\n this.availableItems[i][\"url\"] = this.availableItems[i][\"url\"] || \"#\";\r\n renderedItems += format(CT.dialog.availableItem, this.availableItems[i]);\r\n }\r\n var isAreaReadonly = this.isReadonly ? 'readonly' : '';\r\n var osName = WA.ENV.os.name.toLowerCase();\r\n this._html = format(CT.dialog.availableItemsArea, {\r\n is_readonly: isAreaReadonly,\r\n label: this.availableItemslabel,\r\n tooltip: L(\"NAME\"),\r\n redaonly_attr: \"\",\r\n data: renderedItems,\r\n placeholder_message: this.filteredItemsEmptyPlaceholder,\r\n tabindex: (osName === 'ios' || osName == 'android') ? 'tabindex = \"-1\"' : ''\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отметить выбранные записи(те что во втором массиве) галочкой.\r\n * Использутся только после показа модального окна.\r\n * @private\r\n */\r\n _markSelectedItemsInAvailableItemsList: function () {\r\n var selItems = this.selectedItems;\r\n for (var i = 0, len = selItems.length; i < len; i++) {\r\n this._markRecord(selItems[i].id, true);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Строит html для области с выбранными записями.\r\n * @private\r\n */\r\n _prepareSelectedItemsArea: function () {\r\n var renderedItems = \"\";\r\n\r\n for (var i = 0, l = this.selectedItems.length; i < l; i++) {\r\n var selected = this._renderSelectedItem(this.selectedItems[i]);\r\n renderedItems += selected;\r\n }\r\n\r\n var displayDelete = this.isReadonly ? 'hidden' : '';\r\n var displayOptions = !this._displayOptions || this.isReadonly ? 'hidden' : '';\r\n\r\n this._html += format(CT.dialog.selectedItemsArea, {\r\n label: this.selectedItemslabel,\r\n extra_attributes: \"\",\r\n name: L(\"NAME\"),\r\n data: renderedItems,\r\n display_delete: displayDelete,\r\n display_options: displayOptions,\r\n option_name: \"\",\r\n area_class: 'stat_SelectedItems'\r\n });\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создание html представления для элемента массива выбранных пунктов {id:\"\", name: \"\"};\r\n * @private\r\n */\r\n _renderSelectedItem: function (item) {\r\n item[\"display_delete\"] = this.isReadonly ? 'hidden' : '';\r\n item[\"delete_title\"] = L(\"DELETE\");\r\n item[\"url\"] = item[\"url\"] || \"#\";\r\n item[\"display_options\"] = 'hidden';\r\n item[\"name\"] = escapeHtml(item[\"name\"]);\r\n return format(CT.dialog.selectedItem, item);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вызывается сразу после открытия модалки, навешивает события на эелементы списков\r\n * @private\r\n */\r\n _initEvents: function () {\r\n this._initSelectedItemsEvents();\r\n this._InitAvailableItemsListEvents();\r\n this._initFilterInputEvents();\r\n\r\n this.bind(\"itemSelect\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n this.bind(\"itemUnSelect\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n\r\n this._initExtraEvents();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Чтобы переопределять в наследниках\r\n * @private\r\n */\r\n _initExtraEvents: function() {\r\n\r\n },\r\n\r\n /**\r\n * Вызывается сразу после открытия модалки, навешивает события на эелементы списков\r\n * @private\r\n */\r\n _initFilterInputEvents: function () {\r\n var instance = this;\r\n\r\n this._jFilterInput.bind('keypress keyup', instance._handlers.keyPressEventHandler);\r\n if (WA.ENV.isAndroid()) { this._jFilterInput.bind('change', instance._handlers.keyPressEventHandler); }//на андроиде так\r\n if (WA.ENV.os.name.toLowerCase() === 'ios') {\r\n this._jFilterInput.blur();\r\n }\r\n this._InitKeyNavigation();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Если только на чтение, то запрещаем выбирать записи.\r\n * Для айпада отключаем ховеры\r\n * @private\r\n */\r\n _InitAvailableItemsListEvents: function (block, isNeedProcessChild) {\r\n var instance = this;\r\n var _hoverItem = function () { this._handlers._hoverItem(this); };\r\n var _unhoverItem = function () { this._handlers._unhoverItem(this); };\r\n\r\n var items = $([]); // = block ? block.find('div.item') : me.recordsList.find('div.item');\r\n\r\n items = this._jAvailableItemsList.find('div.item');\r\n\r\n if (!this.isReadonly) {\r\n items.on('click.MultiSelectModalWindow', instance._handlers.selectItem);\r\n\r\n if (!$.ipad && !WA.ENV.isAndroid()) { //\r\n items.hover(this._handlers._hoverItem, this._handlers._unhoverItem);\r\n }\r\n //me._InitScrollForTouchScreens();\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @private\r\n */\r\n _getColumnsInfo: function() {\r\n var cols = [];\r\n // Колонка для удаления выбранной записи.\r\n if (!this.isReadonly) {\r\n var colWidth = WA.ENV.isMobile() ? '20px' : '15px';\r\n cols.push({ \"sWidth\": colWidth, \"bVisible\": true, \"bSortable\": false });\r\n } else {\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n }\r\n // Колонка \"Наименование\"\r\n cols.push({ \"bVisible\": true, \"sWidth\": '400px', \"bSortable\": false });\r\n // Скрытая опциональная колонка\r\n if (!this.isReadonly && this._displayOptions) cols.push({ \"bVisible\": false, \"sWidth\": \"0\", \"bSortable\": false });\r\n else cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n return cols;\r\n },\r\n\r\n /**\r\n * Установка событий для контролов выбранных элементов\r\n * @private\r\n */\r\n _initSelectedItemsEvents: function () {\r\n var cols = this._getColumnsInfo();\r\n this._datatable = this._jSelectedItemsTable.dataTable({\r\n \"sScrollY\": (this._jSelectedItemsTable.parent().height() - 38) + 'px',\r\n \"bAutoWidth\": false,\r\n \"bDeferRender\": true,\r\n \"bPaginate\": false,\r\n \"bSortable\": false,\r\n \"oLanguage\": { \"sZeroRecords\": L(\"EMPTY\") },\r\n 'aoColumns': cols\r\n });\r\n\r\n if (WA.ENV.isAndroid() || $.ipad) {\r\n var tableWidth = 489;\r\n this._jSelectedItemsTable.width(tableWidth);\r\n $('.dataTables_scrollHeadInner').width(tableWidth).children('table').width(tableWidth);\r\n } else {\r\n // dataTable пересчитывает ширину таблицы, приходится исправлять на 100%\r\n $('.dataTables_scrollHeadInner').width('100%').children('table').width('100%');\r\n }\r\n\r\n var instance = this;\r\n this._jSelectedItemsTable.find('tr').each(function () { instance._initSingleSelectedItemEvents(this); });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навешивание обработчков событий на конкретный элемент списка выбранных записей\r\n * @private\r\n */\r\n _initSingleSelectedItemEvents(row) {\r\n row = $(row);\r\n var instance = this;\r\n\r\n const jRemoveFromSelect = row.find('.removeFromSelect');\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n row.hover(\r\n function () { instance._jSelectedItemsTable.find(\"tr\").not(this).trigger(\"mouseout\"); $(this).addClass('over'); },\r\n function () { $(this).removeClass('over'); });\r\n jRemoveFromSelect.on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data.deleteItemFromSelectedItemsTable(this);\r\n });\r\n } else {\r\n // на планшетах, т.к. нет ховера, сразу рисуем крестик и навешиваем удаление на ячейку с ним\r\n jRemoveFromSelect.closest('.selected-records-item').addClass('tablet');\r\n jRemoveFromSelect.closest('td').on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data.deleteItemFromSelectedItemsTable(this);\r\n });\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаление элемента из списка выбранных записей, и из массива который был передан в конструктор.\r\n * @private\r\n */\r\n deleteItemFromSelectedItemsTable(item) {\r\n // Если только для чтения, запрещаем удалять выбранные записи.\r\n if (!this.isReadonly) {\r\n const row = $(item).closest('tr');\r\n const id = row.attr('id');\r\n const idx = this._getSelectedItemById(id);\r\n\r\n if (idx >= 0) {\r\n this.selectedItems.splice(idx, 1);\r\n }\r\n\r\n this.fire('itemUnSelect', id);\r\n this._datatable.fnDeleteRow(row[0]);\r\n this._markRecord(id, false);\r\n this._fixSelectedItemsTableBorder();\r\n this._addPlaceholderIfTableIsempty();\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** Поиск элемента среди выбранных по id\r\n * @param {string} id - идентификатор элемента\r\n * @return {integer} индекс выбранного элемента в массиве\r\n * @private\r\n * @function WebAccess.components.dialogs.BaseMultiSelect#_getSelectedItemById\r\n */\r\n _getSelectedItemById: function (id) {\r\n return getElementIndexByAttr(this.selectedItems, \"id\", id);\r\n },\r\n\r\n /** Поиск элемента среди доступных по id\r\n * @param {string} id - идентификатор элемента\r\n * @private\r\n * @return {object} объект выбранного элемента\r\n * @function WebAccess.components.dialogs.BaseMultiSelect#_getSelectedItemById\r\n */\r\n _getAvailableItemById: function (id) {\r\n return this.availableItems[getElementIndexByAttr(this.availableItems,\"id\", id)];\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пометка элемента \"выбранным\" или наоборот, не выбранным если второй аргумент false.\r\n * @private\r\n * @param {string} id идентификатор\r\n * @param {boolean} mark если true то элемент выделяется как выбранный, и наоборот.\r\n */\r\n _markRecord: function (id, mark) {\r\n if (id) {\r\n var item = this._jAvailableItemsList.find('.item[id=\"' + id + '\"]');\r\n var icon = item.find('.recordlist-item__icon > use');\r\n var iconImage;\r\n if (this.treeMode) {\r\n iconImage = (item.hasClass('favorite')) ? this.favoriteUserIconClass : this.treeModeRecordIconClass;\r\n }\r\n else {\r\n iconImage = this.defaultRecordIcon;\r\n }\r\n if (mark) {\r\n item.addClass('selected');\r\n if (this.treeMode) {\r\n icon.removeClass(this.treeModeRecordIconClass).removeClass(this.favoriteUserIconClass);\r\n iconImage = this.treeModeMarkedRecordIconClass;\r\n } else {\r\n iconImage = this.defaultMarkedRecordIcon;\r\n }\r\n }\r\n else {\r\n item.removeClass('selected');\r\n }\r\n icon.attr('xlink:href', '#' + iconImage);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вставляет сообщение в таблицу, если нет ни одного элемента для отображаения.\r\n * (Сейчас по всей видимости за это отвечает параметр у datatable, а здесь просто отключается кнопка)\r\n * @private\r\n */\r\n _addPlaceholderIfTableIsempty: function () {\r\n var jRows = this._jSelectedItemsTable.children('tbody').find('tr');\r\n\r\n if (jRows.length === 1) {\r\n if (jRows.first().children(\"td\").hasClass(\"dataTables_empty\")) {\r\n this.disableButton(\"modal_ok_button\");\r\n }\r\n }\r\n //var colsCount = 3;\r\n //var emptyRow = $(format(CT.dialog.emptyPlaceholder, { message: L('EMPTY'), cols_count: colsCount }));\r\n //this._jSelectedItemsTable.append(emptyRow);\r\n //this._InitSingleSelectedRecordEvents(emptyRow);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Используется для динамического добавления новой записи.\r\n * @private\r\n */\r\n _InitSingleSelectedRecordEvents: function (row) {\r\n row = $(row);\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n row.hover(\r\n function () { $(this).addClass('over').find('.removeFromSelect').css('visibility', 'visible'); },\r\n function () { $(this).removeClass('over').find('.removeFromSelect').css('visibility', 'hidden'); });\r\n }\r\n else {\r\n row.find('.removeFromSelect').css('visibility', 'visible');\r\n }\r\n row.find('.removeFromSelect').on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data.DeleteItemFromSelection(this);\r\n });\r\n\r\n // Навешивает события для отображения подсказок.\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _setupKeyScope: function() {\r\n },\r\n\r\n /**\r\n * Добавлем бордер к div в которой находится таблица.\r\n * @private\r\n */\r\n _fixSelectedItemsTableBorder: function () {\r\n var p = this._jSelectedItemsTable.parent();\r\n if (this._jSelectedItemsTable.height() > p.height()) {\r\n p.addClass('fixBorderBottom');\r\n } else {\r\n p.removeClass('fixBorderBottom');\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выбрать элемент.\r\n *\r\n * @param {object} item Выбранный элемент\r\n * @function WebAccess.components.dialogs.BaseMultiSelect#selectItem\r\n * @returne {WebAccess.components.dialogs.BaseMultiSelect} Объект типа BaseMultiSelect.\r\n */\r\n selectItem: function (item) {\r\n this.selectedItems.push(item);\r\n\r\n this._markRecord(item.id, true);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _hoverItem: function (item) {\r\n $(item).addClass(\"over\").find('.treeview_img_action').removeClass(\"hidden\");\r\n },\r\n\r\n _unhoverItem: function (item) {\r\n $(item).removeClass('over').find('.treeview_img_action').addClass(\"hidden\");\r\n },\r\n\r\n /**\r\n * Добавляет новые строки в таблицу выбранных.\r\n * @private\r\n */\r\n _addItemToSelectedItems: function (items) {\r\n var instance = this;\r\n var html = \"\";\r\n for (var i = 0; i < items.length; i++) {\r\n if (this._getSelectedItemById(items[i].id) !== -1) continue;\r\n items[i].name = escapeHtml(items[i].name);\r\n html += this._renderSelectedItem(items[i]);\r\n this.selectItem(items[i]);\r\n }\r\n if (!!html) {\r\n this._jSelectedItemsTable.find('td.dataTables_empty').parent().remove();\r\n this.enableButton(\"modal_ok_button\");\r\n //this._jSelectedItemsTable.append(html);\r\n\r\n var columns = html.split(/<\\/td>\\s*', '', ' instance._jAvailableItemsList.height()) {\r\n var itemHeight = 20;\r\n var height = 0;\r\n var currentID = item.attr('id');\r\n var items = instance._jAvailableItemsList.find('div.item:visible,div.recordGroup:visible');\r\n var i;\r\n\r\n if (down) {\r\n for (i = items.length - 1; i >= 0; i--) {\r\n if ($(items[i]).attr('id') == currentID) {\r\n height += (i + 1) * itemHeight;\r\n break;\r\n }\r\n }\r\n if (instance._jAvailableItemsList.height() - height < 50) {\r\n instance._jAvailableItemsList.scrollTop(instance._jAvailableItemsList.scrollTop() + itemHeight);\r\n }\r\n }\r\n else {\r\n for (i = 0; i < items.length; i++) {\r\n if ($(items[i]).attr('id') == currentID) {\r\n height += (i + 1) * itemHeight;\r\n break;\r\n }\r\n }\r\n if (height - instance._jAvailableItemsList.scrollTop() < 50) {\r\n instance._jAvailableItemsList.scrollTop(instance._jAvailableItemsList.scrollTop() - itemHeight);\r\n }\r\n }\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _getItemsListHeight: function () {\r\n var height = 0;\r\n var items = this._jAvailableItemsList.children();\r\n for (var i = 0; i < items.length; i++) {\r\n height += $(items[i]).height();\r\n }\r\n return height;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n show: function () {\r\n this._preInit();\r\n this.html = this._html;\r\n this._super();\r\n this._postInit();\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Регистронезависимый селектор :Contains\r\n * с лайк поиском (((\r\n * @inner\r\n */\r\n jQuery.expr[':'].Contains = function (a, i, m) {\r\n var words = m[3].toUpperCase().split(\" \");\r\n var matches = 0;\r\n if (words.length > 10) return false; //Много слов - большие затупы. Цикл же.\r\n\r\n for (var n = 0; n < words.length; n++) {\r\n if (jQuery(a).text().toUpperCase().indexOf(words[n]) >= 0) matches += 1;\r\n if (matches == words.length) return true;\r\n }\r\n\r\n return matches == words.length;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n global.BaseMultiSelect = BaseMultiSelect;\r\n})(window.WebAccess.components.dialogs);\r\n","\"use strict\";\r\n\r\n/**\r\n* Диалог со справочником в табличном режиме.\r\n*\r\n* @class WebAccess.components.dialogs.ReferenceGridDialog\r\n* @extends WebAccess.components.dialogs.BaseDialog\r\n* @since 5.4.0.1012\r\n*\r\n* Открывает справочник в табличном режиме в iframe в диалоговом окне.\r\n*\r\n\r\n* @param {object} settings Настройки диалога со справочником:\r\n* @param {string} referenceName Код справочника\r\n* @param {string} [referenceCaption] Заголовок справочника\r\n* @param {string} [context] Контекст представления справочника (объединяется с \"modal.\")\r\n* @param {REFERENCE_MODAL_MODE} [mode] Режим открытия справочника (MULTI – множественный выбор, SINGLE – единичный выбор, VIEW – просмотр)\r\n* @param {string} [filterQuery] Фильтр справочника - значение, введенное с клавиатуры в поле ввода\r\n* @param {string} [filterExpression] Выражение фильтрации\r\n* @param {array} [visibleColumns] Порядок и состав видимых колонок справочника, если их еще нет в сохраненном контексте\r\n* @param {string} [modalDialogTitle] Заголовок модального окна\r\n* @property {string} className Имя текущего класса\r\n\r\n* @example\r\n* var dialog = new WebAccess.components.dialogs.ReferenceGridDialog({referenceName:\"РАБ\"});\r\n* dialog.bind(\"close\", function(data) {});\r\n* dialog.show();\r\n*/\r\n(function (global) {\r\n var BROWSER_TOOLBAR_HEIGHT = 100;\r\n\r\n var MIN_DIALOG_MARGIN = 40;\r\n var MAX_DIALOG_MARGIN_PERCENT = 30; // отступы 30% от размера браузера, но не менее MIN_DIALOG_MARGIN.\r\n\r\n var ReferenceGridDialog = global.BaseDialog.extend({\r\n className: 'ReferenceGridDialog',\r\n height: MIN_SUPPORTS_WINDOW_HEIGHT - BROWSER_TOOLBAR_HEIGHT - MIN_DIALOG_MARGIN,\r\n width: MIN_SUPPORTS_WINDOW_WIDTH - MIN_DIALOG_MARGIN,\r\n isShowOkButton: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (settings) {\r\n var me = this;\r\n me._super(settings);\r\n me.settings = settings;\r\n\r\n if (me.settings.modalDialogTitle) {\r\n me.title = me.settings.modalDialogTitle;\r\n } else {\r\n me._addReferenceCaptionToTitle();\r\n }\r\n\r\n var referenceUrl = me._makeReferenceRecordUrl(me.settings.referenceName, me.settings.context, me.settings.mode,\r\n me.settings.filterExpression, me.settings.filterQuery, me.settings.visibleColumns, me.settings.hideToolbar,\r\n me.settings.queryContext, me.settings.leaderSelectedId, me.settings.instanceId);\r\n me.html = '';\r\n\r\n me._changeDialogBodyMinWidth();\r\n\r\n me._changeDialogDimensions();\r\n\r\n me._bindDialogEvents();\r\n\r\n if (me.settings.mode == REFERENCE_MODAL_MODE.SINGLE) {\r\n me._addSelectRecordColumn();\r\n }\r\n\r\n return me;\r\n },\r\n\r\n // Добавляет заголовок справочника в заголовок модального окна.\r\n _addReferenceCaptionToTitle: function () {\r\n var me = this;\r\n var filterTitle = me.filterQuery ? (L('REFERENCE_GRID_DIALOG_TITLE_FILTER_QUERY') + '\"' + me.filterQuery.escapeHtml() + '\"') : '';\r\n if (me.referenceCaption) {\r\n me.setTitle(format(L('REFERENCE_GRID_DIALOG_TITLE_WITH_REFERENCE_CAPTION') + filterTitle, me.referenceCaption.escapeHtml()));\r\n } else {\r\n // Временно установим общий заголовок без названия справочника.\r\n me.setTitle(L('REFERENCE_GRID_DIALOG_TITLE') + filterTitle);\r\n WebAccess.services.reference.getReferenceCaption(me.settings.referenceName).done(function (caption) {\r\n me.setTitle(format(L('REFERENCE_GRID_DIALOG_TITLE_WITH_REFERENCE_CAPTION') + filterTitle, caption.escapeHtml()));\r\n });\r\n }\r\n },\r\n\r\n // Формирует URL для вызова справочника в iframe в модальном окне\r\n _makeReferenceRecordUrl: function (compcode, context, modalmode, filter, likefilter, columns, hideToolbar, queryContext, leaderSelectedId, instanceId) {\r\n var cols = columns;\r\n // Обязательные колонки.\r\n if (cols) {\r\n cols.unshift('_Checkbox');\r\n }\r\n\r\n var url = WA.FC.references(compcode).toURL();\r\n url.setParam('context', context ? ('modal.' + context) : 'modal');\r\n if (modalmode) url.setParam('modalmode', modalmode);\r\n if (filter) url.setParam('filter', filter);\r\n if (likefilter) url.setParam('likefilter', likefilter);\r\n if (cols) url.setParam('columns', cols.join(';'));\r\n if (hideToolbar) url.setParam('hidetoolbar', '1');\r\n if (queryContext) url.setParam('querycontext', queryContext);\r\n if (leaderSelectedId) url.setParam('leaderSelectedId', encodeURIComponent(leaderSelectedId));\r\n if(instanceId) url.setParam('uid', instanceId);\r\n\r\n return url.asString();\r\n },\r\n\r\n _changeDialogBodyMinWidth: function () {\r\n var me = this;\r\n me.bind(me['class'].EVENT.AFTER_OPEN, function () {\r\n var jIframe = me._jDialog.find('iframe').eq(0);\r\n jIframe.on('load', function () {\r\n var IframeWindow = jIframe.get(0).contentDocument;\r\n $(IframeWindow.body).addClass('reference_dialog_body');\r\n });\r\n });\r\n },\r\n\r\n // Изменяет размеры диалогового окна в зависимости от размеров экрана\r\n _changeDialogDimensions: function () {\r\n var me = this;\r\n var ww = $(window).width();\r\n var wh = $(window).height();\r\n\r\n // ширина диалога с отступами MAX_DIALOG_MARGIN_PERCENT % от ширины браузера, либо с отступами MIN_DIALOG_MARGIN при малой ширине браузера.\r\n var dialogWidth = ww * (1 - MAX_DIALOG_MARGIN_PERCENT / 100);\r\n if (dialogWidth > MIN_SUPPORTS_WINDOW_WIDTH)\r\n me.setWidth(dialogWidth);\r\n else\r\n me.setWidth(ww - MIN_DIALOG_MARGIN);\r\n\r\n var dialogHeight = wh - MIN_DIALOG_MARGIN;\r\n if (dialogHeight > MIN_SUPPORTS_WINDOW_HEIGHT)\r\n me.setHeight(dialogHeight);\r\n else\r\n me.setHeight(wh - MIN_DIALOG_MARGIN);\r\n },\r\n\r\n // Подписывается и отписывается на событие получения сообщения и закрытия диалога\r\n _bindDialogEvents: function () {\r\n var me = this;\r\n $(window)\r\n .on(\"message.ReferenceGridDialog\", function (e) {\r\n me._sendSelectedRecords(e);\r\n })\r\n .on(\"resizeEnd.ReferenceGridDialog\", function () {\r\n me._changeDialogDimensions();\r\n me._placeInCenter();\r\n });\r\n\r\n // Вызываем событие resizeEnd для пересчитывания размеров ленты справочника и иконок в ней\r\n me.bind(me['class'].EVENT.AFTER_OPEN, function () {\r\n var jIframe = me._jDialog.find('iframe').eq(0);\r\n jIframe.on('load', function () {\r\n jIframe.trigger('resizeEnd');\r\n });\r\n });\r\n\r\n me.bind(me['class'].EVENT.AFTER_CLOSE, function () {\r\n $(window)\r\n .off(\"message.ReferenceGridDialog\")\r\n .off(\"resizeEnd.ReferenceGridDialog\");\r\n });\r\n\r\n if (me.settings.mode !== REFERENCE_MODAL_MODE.VIEW) {\r\n me.bind(me['class'].EVENT.AFTER_OPEN, function () {\r\n\r\n var jIframe = me._jDialog.find('iframe').eq(0);\r\n // Когда iframe загрузился.\r\n jIframe.on('load', function () {\r\n\r\n // Добавляем кнпоку \"Выбрать\".\r\n me._initSelectionButton(me.settings.referenceName);\r\n if (me.settings.mode == REFERENCE_MODAL_MODE.SINGLE) {\r\n me._bindDisableSelectButtonInSigleMode(me.settings.referenceName);\r\n } else {\r\n me._bindDisableSelectButtonInMultiMode(me.settings.referenceName);\r\n }\r\n });\r\n });\r\n }\r\n },\r\n\r\n _addSelectRecordColumn: function () {\r\n var me = this;\r\n //var jIframe = me._jDialog.find('iframe').eq(0);\r\n if (me.settings.mode !== REFERENCE_MODAL_MODE.VIEW) {\r\n me.bind(me['class'].EVENT.AFTER_OPEN, function () {\r\n\r\n var jIframe = me._jDialog.find('iframe').eq(0);\r\n\r\n // Когда iframe загрузился.\r\n jIframe.on('load', function () {\r\n var IframeWindow = jIframe.get(0).contentWindow;\r\n // Когда grid проинициализировался.\r\n $.when(IframeWindow.Core.grid.referenceInit).then(function () {\r\n // Регистрируем глобальную функцию для клика по ссылке в ячейке грида.\r\n IframeWindow.ReferenceGridDialogCellClick = function (ev, el) {\r\n var recId = $(el).parents('.slick-row').eq(0).data('recid');\r\n var selectedRow = IframeWindow.Core.grid.reference.dataView.getItemById(recId);\r\n var leaderValues = me._getLeaderValues(selectedRow);\r\n IframeWindow.WebAccess.components.dialogs.ReferenceGridDialog.sendRecordById(me.settings.referenceName, recId, leaderValues);\r\n };\r\n\r\n // Функция пересортировки полей справочника\r\n var grid = IframeWindow.Core.grid.reference;\r\n var columns = grid.getColumns();\r\n var columnsAmount = columns.length;\r\n var selectRecordColumnIndex = 0;\r\n for (var i = 0; i < columnsAmount; i++) {\r\n var isSpecialColumn = (columns[i].id.charAt(0) == '_') ? true : false;\r\n if (isSpecialColumn) {\r\n selectRecordColumnIndex = columns[i].index + 1;\r\n }\r\n else if (columns[i].index > -1) {\r\n columns[i].index += 1;\r\n }\r\n }\r\n // Параметры добавляемой колонки \"Выбрать\"\r\n var selectRecordColumn = {\r\n cssClass: \"centered\",\r\n formatter: function () {\r\n return '

    '\r\n + ''\r\n + L('SELECT_RECORDS') + '

    ';\r\n },\r\n headerCssClass: \"notDraggable\",\r\n id: \"_SelectRecord\",\r\n index: selectRecordColumnIndex,\r\n name: \" \",\r\n field: null,\r\n resizable: false,\r\n sortable: false,\r\n visible: true,\r\n width: (L(\"SELECT_RECORDS\").length * 11 + 25)\r\n }\r\n columns.push(selectRecordColumn);\r\n grid.setColumns(columns);\r\n });\r\n });\r\n });\r\n }\r\n },\r\n\r\n // Возвращает значения ведущих реквизитов.\r\n _getLeaderValues: function (row) {\r\n var me = this;\r\n var leaderValues = {};\r\n if (me.settings.leaderSelectedId) {\r\n //убираем последний символ '&'\r\n var leadReqNames = me.settings.leaderSelectedId.slice(0, -1).split('&').map(function (selId) {\r\n return selId.split(\"|\")[0];\r\n });\r\n leadReqNames.forEach(function (leadColumnName) {\r\n leaderValues[leadColumnName] = [\r\n row[leadColumnName],\r\n row[\"SBRSE_\" + leadColumnName + \"_Text\"],\r\n row[\"SBRSE_\" + leadColumnName + \"_Text\"],\r\n {}\r\n ];\r\n });\r\n }\r\n return leaderValues;\r\n },\r\n\r\n // Возвращает массив с выбранными в справочнике значениями при получении postMessage из ифрейма\r\n _sendSelectedRecords: function (e) {\r\n var me = this;\r\n var data = e.originalEvent.data;\r\n var locationOrigin = !location.origin ? (location.protocol + '//' + location.host) : location.origin;\r\n if (e.originalEvent.origin != locationOrigin) {\r\n console.log(\"Домен отправителя postMessage не совпадает с доменом адресата: \" + e.originalEvent.origin);\r\n return false;\r\n }\r\n if (data.destination == 'ReferenceGridDialog') {\r\n me.fire('select', data.selectedItems);\r\n me.close();\r\n }\r\n\r\n },\r\n\r\n // Добавляет кнопку \"выбрать\" в ленту справочника при открытии его в диалоговом окне.\r\n _initSelectionButton: function (referenceCode) {\r\n var me = this;\r\n var IframeWindow = me._jDialog.find('iframe').get(0).contentWindow;\r\n $.when(IframeWindow.WA.ToolBarInit).then(function () {\r\n var afterGroupName = 'TOOLBAR_DOC_FOLDER_TASK_GROUP';\r\n // Если группа есть, вставляем после ней, иначе вставляем в самое начало.\r\n if (!IframeWindow.WA.CR.toolBar.groups[afterGroupName]) {\r\n afterGroupName = '';\r\n }\r\n IframeWindow.WA.CR.toolBar.groups.create(\"TOOLBAR_SELECT_RECORDS\", afterGroupName);\r\n IframeWindow.WA.CR.toolBar.groups['TOOLBAR_SELECT_RECORDS'].createButton({\r\n name: \"SelectRecords\",\r\n text: L(\"SELECT_RECORDS\"),\r\n icon: \"accept-20\",\r\n toolTip: L(\"CLICK_TO_SELECT_RECORDS\"),\r\n jsaction: function () {\r\n var selectedRecords = IframeWindow.WA.CR.objectList.getSelectedItems();\r\n if (me.settings.mode === REFERENCE_MODAL_MODE.SINGLE && selectedRecords.length === 1) {\r\n var recId = selectedRecords[0].id;\r\n var selectedRow = IframeWindow.Core.grid.reference.dataView.getItemById(recId);\r\n var leaderValues = me._getLeaderValues(selectedRow);\r\n IframeWindow.WebAccess.components.dialogs.ReferenceGridDialog.sendRecordById(referenceCode, recId, leaderValues);\r\n } else {\r\n IframeWindow.WebAccess.components.dialogs.ReferenceGridDialog.sendMultiSelectedRecords(referenceCode, selectedRecords);\r\n }\r\n }\r\n });\r\n });\r\n },\r\n\r\n // Блокирует кнопку выбора, если не выбрана только 1 запись.\r\n _bindDisableSelectButtonInSigleMode: function (referenceCode) {\r\n var me = this;\r\n $.when(WA.ObjectListInit).then(function () {\r\n var IframeWindow = me._jDialog.find('iframe').get(0).contentWindow;\r\n IframeWindow.WA.CR.objectList.bind('onChange', function (records) {\r\n var btn = IframeWindow.WA.CR.toolBar.groups['TOOLBAR_SELECT_RECORDS'].getButtons()['SelectRecords'];\r\n if (records.length === 1) {\r\n btn.enable();\r\n } else {\r\n btn.disable();\r\n }\r\n });\r\n });\r\n },\r\n\r\n // Блокирует кнопку выбора, если не выбрано ни одной записи.\r\n _bindDisableSelectButtonInMultiMode: function (referenceCode) {\r\n var me = this;\r\n $.when(WA.ObjectListInit).then(function () {\r\n var IframeWindow = me._jDialog.find('iframe').get(0).contentWindow;\r\n IframeWindow.WA.CR.objectList.bind('onChange', function (records) {\r\n var btn = IframeWindow.WA.CR.toolBar.groups['TOOLBAR_SELECT_RECORDS'].getButtons()['SelectRecords'];\r\n if (records.length < 1) {\r\n btn.disable();\r\n } else {\r\n btn.enable();\r\n }\r\n });\r\n });\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n }, {\r\n // static\r\n\r\n /**\r\n * Создает и отображает модальное окно со справочником.\r\n\t*\r\n * @since 5.4.0.1012\r\n * @function WebAccess.components.dialogs.ReferenceGridDialog.createAndShow\r\n *\r\n * @param {object} settings Настройки диалога со справочником\r\n * @return {object} Объект с функциями selectionDone и selectionCancel, которые срабатывают соответственно при выборе записи или при отмене выбора.\r\n * @examples\r\n * WebAccess.components.dialogs.ReferenceGridDialog.createAndShow({referenceName:\"РАБ\",mode:REFERENCE_MODAL_MODE.MULTI})\r\n * .selectionDone(function(result) { console.log('result', result); });\r\n * WebAccess.components.dialogs.ReferenceGridDialog.createAndShow({referenceName:\"РАБ\"}).selectionCancel(function() { console.log('cancel'); });\r\n */\r\n createAndShow: function (settings) {\r\n var def = $.Deferred();\r\n var dialog = new WebAccess.components.dialogs.ReferenceGridDialog(settings);\r\n dialog.bind(\"select\", function (data) {\r\n def.resolve(data);\r\n });\r\n dialog.bind(\"close\", function (data) {\r\n // Если Deferred зарезолвился, то reject уже не срабатывает.\r\n def.reject();\r\n });\r\n dialog.show();\r\n return {\r\n selectionDone: function (cb) {\r\n def.done(cb);\r\n },\r\n selectionCancel: function (cb) {\r\n def.fail(cb);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Отправляет все выбранные значения справочника в родительское окно.\r\n\t*\r\n * @since 5.4.0.1013\r\n * @function WebAccess.components.dialogs.ReferenceGridDialog.sendMultiSelectedRecords\r\n * @param {string} referenceCode Код справочника\r\n * @param {WebAccess.components.wrappers.objectList.ListItem[]} opt_records Список записей для отправки.\r\n */\r\n sendMultiSelectedRecords: function (referenceCode, opt_records) {\r\n var records = opt_records || WA.CR.objectList.getSelectedItems();\r\n var convertedRecords = records.map(function (record) {\r\n return convertObjectListRecord(referenceCode, record);\r\n });\r\n sendRecordsToParent(convertedRecords);\r\n },\r\n\r\n /**\r\n * Отправляет выбранное значение справочника в родительское окно.\r\n\t*\r\n * @since 5.4.0.1021\r\n * @function WebAccess.components.dialogs.ReferenceGridDialog.sendRecordById\r\n * @param {string} referenceCode Код справочника\r\n * @param {string} recId ИД записи справочника\r\n */\r\n sendRecordById: function (referenceCode, recId, leaderRequisiteValues) {\r\n var record = WA.CR.objectList.getItems()[recId];\r\n record = convertObjectListRecord(referenceCode, record, leaderRequisiteValues);\r\n sendRecordsToParent([record]);\r\n }\r\n });\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n // Отправка объекта с выбранными значениями в родительское окно.\r\n function sendRecordsToParent(records) {\r\n var locationOrigin = !location.origin ? (location.protocol + '//' + location.host) : location.origin;\r\n window.parent.postMessage({\r\n destination: 'ReferenceGridDialog',\r\n selectedItems: records\r\n }, locationOrigin);\r\n }\r\n\r\n // Подготовка записи справочника для отправки в родительское окно (формирование объекта с необходимыми атрибутами).\r\n function convertObjectListRecord(referenceCode, record, leaderRequisiteValues) {\r\n return {\r\n id: record[\"id\"],\r\n name: record[\"name\"],\r\n code: record[\"code\"],\r\n referenceCode: referenceCode,\r\n leaderRequisiteValues: leaderRequisiteValues\r\n };\r\n }\r\n\r\n global.ReferenceGridDialog = ReferenceGridDialog;\r\n})(window.WebAccess.components.dialogs);\r\n","\"use strict\";\r\n/**\r\n* Диалог множественного выбора c поддержкой сортировки.\r\n* \r\n* @class WebAccess.components.dialogs.SortableMultiSelect\r\n* @extends WebAccess.components.dialogs.BaseMultiSelect\r\n* @ignore\r\n* @param {array} availableItems Список доступных элементов, в том числе элементы, которые были выбраны. Отображаются в левой части диалогового окна\r\n* @param {array} [opt_selectedItems] Список выбранных элементов. Отображается в правой части диалогового окна\r\n* @param {object} [opt_settings] Настройки диалогового окна\r\n*/\r\n(function (global) {\r\n var SortableMultiSelect = global.BaseMultiSelect.extend({\r\n init: function (availableItems, opt_selectedItems, opt_settings) {\r\n var instance = this;\r\n this._displayOptions = true;\r\n this._super(availableItems, opt_selectedItems, opt_settings);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация событий\r\n * Здесь сделаем, так что при смене сортировки данные будут считаться измененными.\r\n * @private \r\n */\r\n _initEvents: function () {\r\n this._super();\r\n \r\n this.bind(\"sortingChanged\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установки параметров колонок таблицы с выбранными элементами.\r\n * В данном случае есть 3-й столбец\r\n * Для мобильных браузеров проще и эффективнее задавать ширину в процентах\r\n * @private\r\n * @return {array} параметры колонок\r\n */\r\n _getColumnsInfo: function () {\r\n var cols = []; \r\n if (WA.ENV.isMobile()) {\r\n if (!this.isReadonly) {\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"15px\", \"bSortable\": false });\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"360px\", \"bSortable\": false });\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"30px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"8%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"74%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"12%\", \"bSortable\": false });\r\n } else {\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"100%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n }\r\n } else {\r\n if (!this.isReadonly) {\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"14px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"399px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"31px\", \"bSortable\": false });\r\n } else {\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"447px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n }\r\n }\r\n return cols;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * параметры отрисовки выбранного элемента. В данном случае у нас добавился еще один столбец option\r\n * @param {object} item элемент массива выбранных пунктов\r\n * @private\r\n * @return {string} разметка элемента\r\n */\r\n _renderSelectedItem: function (item) {\r\n\r\n item[\"display_delete\"] = this.isReadonly ? 'hidden' : '';\r\n item[\"delete_title\"] = L(\"DELETE\");\r\n item[\"display_options\"] = this.isReadonly ? 'hidden' : '';\r\n item[\"url\"] = item[\"url\"] || \"#\";\r\n \r\n// item[\"name\"] = escapeHtml(item[\"name\"]);\r\n\r\n if (!WA.ENV.isAndroid() && !$.ipad) var visibility = 'hidden';\r\n item[\"option\"] = format(CT.dialog.sortingButtons, { 'is_hidden': visibility });\r\n\r\n return format(CT.dialog.selectedItem, item); \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навешиваем события на выбранный пункт\r\n * @param {string} rowSelector [description]\r\n * @private\r\n */\r\n _initSingleSelectedItemEvents: function (rowSelector) { \r\n this._super(rowSelector);\r\n var instance = this;\r\n\r\n var jRow = $(rowSelector);\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n jRow.hover(\r\n function () {\r\n $(this).find('.itemUp').removeClass(\"hidden\");\r\n $(this).find('.itemDown').removeClass(\"hidden\");\r\n },\r\n function () {\r\n $(this).find('.itemUp').addClass('hidden');\r\n $(this).find('.itemDown').addClass('hidden');\r\n }\r\n );\r\n }\r\n\r\n jRow.find('.itemUp').off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data._swapRows(this, \"up\");\r\n var a = $(this); \r\n });\r\n jRow.find('.itemDown').off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data._swapRows(this, \"down\");\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Смена элементов местами\r\n * @param {string} itemSelector пункт меню который будет перемещатся\r\n * @param {string} [\"up\"|\"down\"] direction направление перемещения\r\n * @private\r\n */\r\n _swapRows: function (itemSelector, direction) {\r\n var jPair;\r\n var jRow = this._jSelectedItemsTable.find(itemSelector).parent().parent();\r\n\r\n var id = jRow.attr('id');\r\n var index = this._getSelectedItemById(id); \r\n var tmp;\r\n\r\n if (index > 0 && direction == \"up\") {\r\n jPair = jRow.prev();\r\n jPair.before(jRow);\r\n\r\n setTimeout(function () { \r\n jRow.trigger('mouseover');\r\n }, 50);\r\n\r\n tmp = this.selectedItems[index - 1];\r\n this.selectedItems[index - 1] = this.selectedItems[index];\r\n this.selectedItems[index] = tmp;\r\n this.fire(\"sortingChanged\");\r\n }\r\n \r\n if (index < this.selectedItems.length-1 && direction == \"down\") { \r\n jPair = jRow.next();\r\n jPair.after(jRow);\r\n setTimeout(function () { \r\n jRow.trigger('mouseover');\r\n }, 50);\r\n\r\n tmp = this.selectedItems[index + 1];\r\n this.selectedItems[index + 1] = this.selectedItems[index];\r\n this.selectedItems[index] = tmp;\r\n this.fire(\"sortingChanged\");\r\n }\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n });\r\n\r\n global.SortableMultiSelect = SortableMultiSelect;\r\n})(window.WebAccess.components.dialogs);","\"use strict\";\r\n\r\n/**\r\n* Диалог множественного выбора c поддержкой сортировки.\r\n*\r\n* @class WebAccess.components.dialogs.SelectableMultiSelect\r\n* @extends WebAccess.components.dialogs.BaseMultiSelect\r\n\r\n* @param {array} availableItems Список доступных элементов, в том числе элементы, которые были выбраны. Отображаются в левой части диалогового окна\r\n* @param {array} [opt_selectedItems] Список выбранных элементов. Отображаются в правой части диалогового окна\r\n* @param {object} [opt_settings] Настройки диалогового окна\r\n*/\r\n(function (global) {\r\n var SelectableMultiSelect = global.BaseMultiSelect.extend({\r\n init: function (availableItems, opt_selectedItems, opt_settings) {\r\n var instance = this;\r\n this._displayOptions = false;\r\n this._super(availableItems, opt_selectedItems, opt_settings);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация событий\r\n * Здесь сделаем, так что при смене сортировки данные будут считаться измененными.\r\n * @private\r\n */\r\n _initEvents: function () {\r\n this._super();\r\n\r\n this.bind(\"sortingChanged\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установки параметров колонок таблицы с выбранными элементами.\r\n * В данном случае есть 3-й столбец\r\n * Для мобильных браузеров проще и эффективнее задавать ширину в процентах\r\n * @private\r\n * @return {array} параметры колонок\r\n */\r\n _getColumnsInfo: function () {\r\n var cols = [];\r\n if (WA.ENV.isMobile()) {\r\n if (!this.isReadonly) {\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"15px\", \"bSortable\": false });\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"360px\", \"bSortable\": false });\r\n //cols.push({ \"bVisible\": true, \"sWidth\": \"30px\", \"bSortable\": false });\r\n\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"8%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"92%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n } else {\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"100%\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n }\r\n } else {\r\n if (!this.isReadonly) {\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"14px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"399px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n } else {\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n cols.push({ \"bVisible\": true, \"sWidth\": \"447px\", \"bSortable\": false });\r\n cols.push({ \"bVisible\": false, \"bSortable\": false });\r\n }\r\n }\r\n return cols;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Кнопки вверх и вниз.\r\n * Навешиваем на них обработчики.\r\n * Когда нажимем на кнопку и нет ни одной выделенной записи среди выбранных,\r\n * то сами выделяем.\r\n * @private\r\n */\r\n _initExtraEvents: function () {\r\n var me = this;\r\n $(document).not(\"#move_up, #move_down\").bind('click', function (e) {\r\n $(\"#selectedRecordsTable tr\").removeClass(\"marked\");\r\n });\r\n\r\n $(\"#move_up\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n var jMarkedRow = $(\"#selectedRecordsTable tr.marked\");\r\n if (jMarkedRow.length > 0) {\r\n me._swapRows(jMarkedRow, \"up\");\r\n } else {\r\n $(\"#selectedRecordsTable tbody tr:first\").addClass(\"marked\");\r\n }\r\n });\r\n $(\"#move_down\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n var jMarkedRow = $(\"#selectedRecordsTable tr.marked\");\r\n if (jMarkedRow.length > 0) {\r\n me._swapRows(jMarkedRow, \"down\");\r\n } else {\r\n $(\"#selectedRecordsTable tbody tr:first\").addClass(\"marked\");\r\n }\r\n });\r\n\r\n //setTimeout(function () { $(\"#selectedRecordsTable tbody tr:first\").addClass(\"marked\") }, 0);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Строит html для области с выбранными записями.\r\n * @private\r\n */\r\n _prepareSelectedItemsArea: function () {\r\n var renderedItems = \"\";\r\n\r\n for (var i = 0, l = this.selectedItems.length; i < l; i++) {\r\n var selected = this._renderSelectedItem(this.selectedItems[i]);\r\n renderedItems += selected;\r\n }\r\n\r\n var displayDelete = this.isReadonly ? 'hidden' : '';\r\n var displayOptions = !this._displayOptions || this.isReadonly ? 'hidden' : '';\r\n\r\n this._html += format(CT.dialog.selectedItemsArea, {\r\n label: this.selectedItemslabel,\r\n extra_attributes: 'style=\"width: 490px\"',\r\n name: L(\"NAME\"),\r\n data: renderedItems,\r\n display_delete: displayDelete,\r\n display_options: displayOptions,\r\n option_name: \"\",\r\n area_class: 'stat_SelectedItems'\r\n });\r\n this._html += CT.dialog.sortButtons;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * параметры отрисовки выбранного элемента. В данном случае у нас добавился еще один столбец option\r\n * @param {object} item элемент массива выбранных пунктов\r\n * @private\r\n * @return {string} разметка элемента\r\n */\r\n _renderSelectedItem: function (item) {\r\n item[\"items_mode\"] = \"\";\r\n item[\"display_delete\"] = this.isReadonly ? 'hidden' : '';\r\n item[\"delete_title\"] = L(\"DELETE\");\r\n item[\"extra_attributes\"] = 'style=\"text-decoration: none;\"';\r\n item[\"display_options\"] = this.isReadonly ? 'hidden' : 'hidden';\r\n item[\"url\"] = item[\"url\"] || \"#\";\r\n\r\n // item[\"name\"] = escapeHtml(item[\"name\"]);\r\n\r\n //if (!WA.ENV.isAndroid() && !$.ipad) var visibility = 'hidden';\r\n //item[\"option\"] = format(CT.dialog.sortingButtons, { 'is_hidden': visibility });\r\n\r\n return format(CT.dialog.selectedItem, item);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Навешиваем события на выбранный пункт\r\n * @param {string} rowSelector [description]\r\n * @private\r\n */\r\n _initSingleSelectedItemEvents: function (rowSelector) {\r\n this._super(rowSelector);\r\n var instance = this;\r\n\r\n var jRow = $(rowSelector);\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n jRow.hover(\r\n function () {\r\n $(this).find('.itemUp').removeClass(\"hidden\");\r\n $(this).find('.itemDown').removeClass(\"hidden\");\r\n },\r\n function () {\r\n $(this).find('.itemUp').addClass('hidden');\r\n $(this).find('.itemDown').addClass('hidden');\r\n }\r\n );\r\n }\r\n\r\n jRow.on('click', this, function (e) {\r\n e.stopPropagation();\r\n $(\"#selectedRecordsTable tr\").not(this).removeClass(\"marked\");\r\n $(this).addClass(\"marked\");\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Смена элементов местами\r\n * @param {string} itemSelector пункт меню который будет перемещатся\r\n * @param {string} [\"up\"|\"down\"] direction направление перемещения\r\n * @private\r\n */\r\n _swapRows: function (jRow, direction) {\r\n var jPair;\r\n\r\n var id = jRow.attr('id');\r\n var index = this._getSelectedItemById(id);\r\n var tmp;\r\n\r\n if (index > 0 && direction == \"up\") {\r\n jPair = jRow.prev();\r\n jPair.before(jRow);\r\n\r\n setTimeout(function () {\r\n jRow.trigger('mouseover');\r\n }, 50);\r\n\r\n tmp = this.selectedItems[index - 1];\r\n this.selectedItems[index - 1] = this.selectedItems[index];\r\n this.selectedItems[index] = tmp;\r\n this.fire(\"sortingChanged\");\r\n }\r\n\r\n if (index < this.selectedItems.length - 1 && direction === \"down\") {\r\n jPair = jRow.next();\r\n jPair.after(jRow);\r\n setTimeout(function () {\r\n jRow.trigger('mouseover');\r\n }, 50);\r\n\r\n tmp = this.selectedItems[index + 1];\r\n this.selectedItems[index + 1] = this.selectedItems[index];\r\n this.selectedItems[index] = tmp;\r\n this.fire(\"sortingChanged\");\r\n }\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.SelectableMultiSelect = SelectableMultiSelect;\r\n})(window.WebAccess.components.dialogs);\r\n","\"use strict\";\r\n/**\r\n* Модальное сообщение.\r\n* @todo Шабардин П.: описать! \r\n* @class WebAccess.components.dialogs.MessageBox\r\n* @since 5.0.0.4206 \r\n* @extends WebAccess.components.dialogs.BaseDialog\r\n* @todo Шабардин П.: свойства тоже описать\r\n* @todo Шабардин П.: примеры\r\n*/\r\n(function (global) {\r\n\r\n var MessageBox = global.BaseDialog.extend({\r\n className: 'MessageBox',\r\n mainText: '',\r\n additionalText: '',\r\n title: '',\r\n //messageBoxButtons: [],\r\n messageBoxIcon: '',\r\n messageBoxIcons: { 'error': 'error-16', 'info': 'info-16', 'question': 'help-16', 'warning': 'warning-16' },\r\n //okText: '',\r\n height: 'auto',\r\n baseDialog: null,\r\n\r\n init: function (settings) { \r\n this.modalWindowButtons = [];\r\n this._super(settings);\r\n if ($.isPlainObject(settings)) {\r\n $.extend(this, settings);\r\n }\r\n },\r\n\r\n /**\r\n * Добавить кнопку на форму диалогового окна.\r\n *\r\n * @function WebAccess.components.dialogs.MessageBox#addButton\r\n * @param {string} buttonId ИД кнопки\r\n * @param {string} buttonText Надпись кнопки\r\n * @param {function} buttonClick Функция для обработки действия «Нажать на кнопку»\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n addButton: function (buttonId, buttonText, buttonClick) {\r\n this.modalWindowButtons.push(\r\n {\r\n id: buttonId,\r\n text: buttonText,\r\n click: !!buttonClick ? buttonClick : function () { }\r\n });\r\n return this;\r\n },\r\n\r\n /**\r\n * Добавить кнопку «ОК» на форму диалогового окна.\r\n *\r\n * @function WebAccess.components.dialogs.MessageBox#okButton\r\n * @param {function} okCallback Функция для обработки действия «Нажать на кнопку «ОК»\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n okButton: function (okCallback) {\r\n this.modalWindowButtons = [];\r\n this.ok = !!okCallback ? okCallback : function () { };\r\n this.cancel = null;\r\n return this;\r\n },\r\n\r\n /**\r\n * Добавить кнопки «Да» и «Нет» на форму диалогового окна.\r\n *\r\n * @function WebAccess.components.dialogs.MessageBox#yesNoButtons\r\n * @param {function} yesCallback Функция для обработки действия «Нажать на кнопку «Да»\r\n * @param {function} noCallback Функция для обработки действия «Нажать на кнопку «Нет»\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n yesNoButtons: function (yesCallback, noCallback) {\r\n this.okText = L('YES');\r\n this.cancelText = L('NO');\r\n return this.okCancelButtons(yesCallback, noCallback);\r\n },\r\n\r\n /**\r\n * Добавить кнопки «ОК» и «Отмена» на форму диалогового окна.\r\n *\r\n * @function WebAccess.components.dialogs.MessageBox#okCancelButtons\r\n * @param {function} okCallback Функция для обработки действия «Нажать на кнопку «ОК»\r\n * @param {function} cancelCallback Функция для обработки действия «Нажать на кнопку «Отмена»\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n okCancelButtons: function (okCallback, cancelCallback) {\r\n this.messageBoxButtons = [];\r\n this.ok = !!okCallback ? okCallback : function () { };\r\n this.cancel = !!cancelCallback ? cancelCallback : function () { };\r\n this.isShowCancelButton = true;\r\n this.isShowOkButton = true;\r\n return this;\r\n },\r\n\r\n /**\r\n * Показать диалоговое окно с текстом ошибки.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#showError\r\n * @param {string} mainText Основной текст ошибки\r\n * @param {string} additionalText Информационный текст, объясняющий ошибку\r\n * @param {string} title Заголовок диалогового окна\r\n * @param {function} onClose Обработчик события закрытия диалогового окна\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n showError: function (mainText, additionalText, title, onClose) {\r\n if (!title) title = L('ERROR');\r\n this.okText = L('CLOSE');\r\n this.show(mainText, additionalText, title, 'error', null, onClose);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показать диалоговое окно с информацией.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#showInfo\r\n * @param {string} mainText Основной текст сообщения\r\n * @param {string} additionalText Информационный текст, объясняющий суть сообщения\r\n * @param {string} title Заголовок диалогового окна\r\n * @param {function} onClose Обработчик события закрытия диалогового окна\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n showInfo: function (mainText, additionalText, title, onClose) {\r\n if (!title) title = L('INFO');\r\n this.okText = L('CLOSE');\r\n this.show(mainText, additionalText, title, 'info', null, onClose);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показать диалоговое окно с вопросом\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#showQuestion\r\n * @param {string} mainText Основной текст вопроса\r\n * @param {string} additionalText Информационный текст, объясняющий суть вопроса\r\n * @param {string} title Заголовок диалогового окна\r\n * @param {function} onClose Обработчик события закрытия диалогового окна\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n showQuestion: function (mainText, additionalText, title, onClose) {\r\n if (!title) title = L('CONFIRMATION');\r\n this.show(mainText, additionalText, title, 'question', null, onClose);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показать диалоговое окно с предупреждением.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#showWarning\r\n * @param {string} mainText Основной текст предупреждения\r\n * @param {string} additionalText Информационный текст, объясняющий суть предупреждения\r\n * @param {string} title Заголовок диалогового окна\r\n * @param {function} onClose Обработчик события закрытия диалогового окна\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n showWarning: function (mainText, additionalText, title, onClose) {\r\n if (!title) title = L('WARNING');\r\n this.show(mainText, additionalText, title, 'warning', null, onClose);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показать диалоговое окно.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#show\r\n * @param {string} mainText Основной текст\r\n * @param {string} additionalText Информационный текст\r\n * @param {string} title Заголовок диалогового окна\r\n * @param {string} icon Иконка диалогового окна, например, иконка сообщения об ошибке. Возможные значения: error, info, question, warning\r\n * @param {string} defaultButtonId ИД кнопки, которая будет выделена на форме как действие по умолчанию. Имеет смысл, когда кнопки были добавлены через метод addButton\r\n * @param {function} onClose Обработчик события закрытия диалогового окна\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n show: function (mainText, additionalText, title, icon, defaultButtonId, onClose) {\r\n var me = this;\r\n if (mainText === null) return me;\r\n me.setMainText(mainText);\r\n me.setAdditionalText(additionalText);\r\n if (!!title) me.title = title;\r\n if (!!icon) me.messageBoxIcon = icon;\r\n me._setDefaultButton(defaultButtonId);\r\n if (!!onClose) me.onClose = onClose;\r\n me.setHtml(me._getHtml());\r\n //var dialog = new WA.CMP.dialogs.BaseDialog(this._createSettingsObject());\r\n //dialog.height = this.height;\r\n //dialog.width = this.width;\r\n //this.baseDialog = dialog;\r\n me.onOpen = function () {\r\n me._jDialog.parents('.ui-dialog:first').addClass((!!icon ? icon : '') + '-mbox');\r\n };\r\n me._super();\r\n //dialog.show();\r\n return me;\r\n },\r\n\r\n /**\r\n * Добавляет основной текст на форму диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#setMainText\r\n * @param {string} mainText Основной текст\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n setMainText: function (mainText) {\r\n if (!!mainText) {\r\n var splitterIndex = mainText.indexOf('^');\r\n if (splitterIndex != -1) {\r\n //var text = mainText.split('^');\r\n //mainText = text[0];\r\n this.setAdditionalText(mainText.substring(splitterIndex + 1, mainText.length).fromISBuilderToNormal());\r\n mainText = mainText.substring(0, splitterIndex);\r\n }\r\n this.mainText = mainText;\r\n\r\n if (this.isOpened() && this._jDialog) {\r\n this._jDialog.find('.upper-area-text').html(mainText);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Добавляет информационный текст на форму диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.MessageBox#setAdditionalText\r\n * @param {string} additionalText Информационный текст\r\n * @return {WebAccess.components.dialogs.MessageBox} Oбъект класса MessageBox.\r\n * @since 5.0.0.4206\r\n */\r\n setAdditionalText: function (additionalText) {\r\n if (!!additionalText || typeof additionalText == 'string') {\r\n this.additionalText = ('' + additionalText);\r\n if (this.isOpened() && this._jDialog) {\r\n this._jDialog.find('.lower-area').html(additionalText);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Устанавливает кнопку по умолчанию в диалоге. Имеет действие только если кнопки добавлялись через метод addButton\r\n * @private\r\n * @param {string} buttonId ид кнопки по умолчанию\r\n * @since 5.0.0.4206\r\n */\r\n _setDefaultButton: function (buttonId) {\r\n if (!!buttonId && !!this.modalWindowButtons && this.modalWindowButtons.length) {\r\n for (var btn in this.modalWindowButtons) {\r\n if (this.modalWindowButtons[btn].id == buttonId) {\r\n this.modalWindowButtons[btn]['class'] = 'primary';\r\n break;\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * создает объект с настройками для отображения окна\r\n * @private\r\n * @since 5.0.0.4206\r\n */\r\n _createSettingsObject: function () {\r\n var showOkButton = this.messageBoxButtons.length === 0 || !!this.ok;\r\n var showCancelButton = !!this.cancel;\r\n var settings = {\r\n html: this._getHtml(),\r\n title: this.title,\r\n modalWindowButtons: this.messageBoxButtons,\r\n isShowOkButton: showOkButton,\r\n isShowCancelButton: showCancelButton\r\n };\r\n if (!!this.onClose) settings['onClose'] = this.onClose;\r\n if (!!this.ok) settings['ok'] = this.ok;\r\n if (!!this.cancel) settings['cancel'] = this.cancel;\r\n if (!!this.okText) settings['okText'] = this.okText;\r\n if (!!this.cancelText) settings['cancelText'] = this.cancelText;\r\n return settings;\r\n },\r\n\r\n /**\r\n * возвращает html-разметку для окна\r\n * @private\r\n * @since 5.0.0.4206\r\n */\r\n _getHtml: function () {\r\n var icon = !!this.messageBoxIcon ? '' : '';\r\n var mainTextHtml = '

    ' + icon + '

    ' + this.mainText + '
    ';\r\n var additionalTextHtml = '
    ' + this.additionalText + '
    ';\r\n var html = '
    ' + mainTextHtml + additionalTextHtml + '
    ';\r\n return html;\r\n }\r\n\r\n });\r\n\r\n global.MessageBox = MessageBox;\r\n})(window.WebAccess.components.dialogs);","\"use strict\";\r\n\r\n/**\r\n* Диалог создания документа.\r\n*\r\n* @class WebAccess.components.dialogs.CreateDocument\r\n* @since 5.2.0.1100\r\n* @extends WebAccess.components.dialogs.BaseDialog\r\n*\r\n* @example\r\n* // Открытие диалогового окна «Создание документа».\r\n* var dialog = new WA.CMP.dialogs.CreateDocument()\r\n* dialog.bind('ok', function(data) {\r\n* alert('ok')\r\n* });\r\n* dialog.bind('create', function(document) {\r\n* document.open();\r\n* });\r\n* dialog.show()\r\n*/\r\n\r\n/**\r\n * Событие срабатывает при открытии окна создания документа.\r\n * @event WebAccess.components.dialogs.CreateDocument#open\r\n */\r\n\r\n/**\r\n * Событие срабатывает после загрузки содержимого окна создания документа.\r\n * @event WebAccess.components.dialogs.CreateDocument#loaded\r\n */\r\n\r\n/**\r\n * Событие срабатывает после нажатия на кнопку «Создать документ».\r\n * @event WebAccess.components.dialogs.CreateDocument#ok\r\n */\r\n\r\n/**\r\n * Событие срабатывает после создания документа.\r\n * @event WebAccess.components.dialogs.CreateDocument#create\r\n * @param {Link} doc Ссылка на созданный документ\r\n *\r\n */\r\n\r\n(function (global) {\r\n var CreateDocument = global.BaseDialog.extend({\r\n title: L(\"MODAL_DIALOG_SELECT_ITEMS\"),\r\n width: 600,\r\n height: 'auto',\r\n className: \"CreateDocument\",\r\n mode: 'create',\r\n _jWindow: null,\r\n _html: \"\",\r\n _handlers: {},\r\n _jSelectedItemsTable: null,\r\n _jAvailableItemsList: null,\r\n _lastFilterValue: null,\r\n _displayOptions: false,\r\n _datatable: null,\r\n isShowCancelButton: true,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (settings) {\r\n var me = this;\r\n\r\n this._super(settings); \r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создание html разметки и контейнеров\r\n * @private\r\n */\r\n _preInit: function () {\r\n /** Вернем все, что навыбирали в ok callback, и еще выбросим событие с выбранными данными \r\n * @ignore\r\n */\r\n var me = this;\r\n this.ok = this.ok.override(\r\n function () {\r\n var rnd = Math.floor(Math.random() * 10000).toString();\r\n var jWindow = me._jWindow;\r\n var formIsValid = me.isFormValid(jWindow);\r\n\r\n if (formIsValid && CheckFileSize(jWindow.find('form input[type=\"file\"]')[0], jWindow.data('error'))) {\r\n jWindow.find('form').submit();\r\n return false;\r\n }\r\n else if (!formIsValid) {\r\n jWindow.data('error')(L('NOT_ALL_REQUIRED_FIELDS_FILLED'));\r\n return false;\r\n }\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Иницииализация jQuery объектов и навешивание на них событий, \r\n * функция вызывается когда модальное окно и все его элементы загружены.\r\n * @private\r\n */\r\n _postInit: function () {\r\n var me = this;\r\n var jWindow = this._jWindow;\r\n jWindow.data('success', (res) => {\r\n const linkArr = [];\r\n const resArr = res.split(';');\r\n resArr.forEach((item) => {\r\n let url = new WA.URL(item);\r\n let id = url.getParam('id');\r\n let link = new WA.Link(id, OBJECT_TYPE.EDOCUMENT);\r\n link.isNew = true;\r\n linkArr.push(link);\r\n });\r\n me.fire('create', linkArr[0]);\r\n me.fire('createMulti', linkArr);\r\n me.close();\r\n\r\n }).data('error', (res) => {\r\n me.inlineHint.show(res, null, MESSAGE_TYPE.ERROR, INLINE_HINT_PRIORITY.PRIMARY);\r\n me.fire('error', res);\r\n });\r\n\r\n me.initCreateNewDocumentControl(jWindow);\r\n\r\n me.fire('loaded');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n initCreateNewDocumentControl: function () {\r\n var me = this;\r\n me._jWindow.find('[name=\"is_from_file\"]').change(function () {\r\n if (me._jWindow.find('#radio_from_file').is(':checked')) {\r\n $('#new_div_file input').removeAttr('disabled');\r\n setTimeout(function () { //setTimeout нужно т.к. инициализация \"выбора из справочника\" проходит немного позже этого события.\r\n $('#new_div_app input').SetEnabled();\r\n $('#new_div_template input').SetDisabled();\r\n }, 50);\r\n $('#new_div_file, #new_div_app').removeClass('field_disabled');\r\n $('#new_div_template').addClass('field_disabled');\r\n } else {\r\n $('#new_div_file input').attr('disabled', 'disabled');\r\n setTimeout(function () { //setTimeout нужно т.к. инициализация \"выбора из справочника\" проходит немного позже этого события.\r\n $('#new_div_app input').SetDisabled();\r\n $('#new_div_template input').SetEnabled();\r\n }, 50);\r\n $('#new_div_file, #new_div_app').addClass('field_disabled');\r\n $('#new_div_template').removeClass('field_disabled');\r\n }\r\n }).trigger('change');\r\n if ($.ipad && !WA.ENV.isAndroid()) {\r\n me._jWindow.find('#radio_from_file').attr('disabled', 'disabled');\r\n }\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n isFormValid: function (jWindow) {\r\n if (!jWindow.find('input[name=refVid]').val()) return false;\r\n if (!jWindow.find('input[name=refCardType]').val()) return false;\r\n if (this.mode == 'copy') return true;\r\n if ($('#radio_from_template').is(':checked')) {\r\n if (!jWindow.find('input[name=refTempl]').val()) return false;\r\n } else {\r\n if (!jWindow.find('input[type=file]').val()) return false;\r\n if (!jWindow.find('input[name=refApp]').val()) return false;\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вызывается сразу после открытия модалки, навешивает события на эелементы списков\r\n * @private\r\n */\r\n _initEvents: function () {\r\n this._initSelectedItemsEvents();\r\n this._InitAvailableItemsListEvents();\r\n this._initFilterInputEvents();\r\n\r\n this.bind(\"itemSelect\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n this.bind(\"itemUnSelect\", function () {\r\n this.isSelectionChanged = true;\r\n });\r\n\r\n this._initExtraEvents();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n \r\n show: function (opt_mode) {\r\n opt_mode = opt_mode || this.mode;\r\n var me = this;\r\n me._preInit();\r\n var title;\r\n\r\n switch (opt_mode) {\r\n case \"template\":\r\n title = L(\"CREATE_DOCUMENT_FROM_TEMPLATE\");\r\n break;\r\n case \"file\":\r\n title = L(\"CREATE_DOCUMENT_FROM_FILE\");\r\n break;\r\n case \"create\":\r\n title = L(\"CREATE_DOCUMENT\");\r\n break;\r\n case \"copy\":\r\n title = L(\"COPY_DOCUMENT\");\r\n break;\r\n default:\r\n title = L(\"CREATE_DOCUMENT\");\r\n break;\r\n }\r\n\r\n me.okText = opt_mode == \"copy\" ? L(\"COPY\") : L(\"CREATE\");\r\n\r\n\r\n me._super();\r\n me.setSpinner();\r\n\r\n var folder_id = GetParamInURL(\"id\");\r\n if (!folder_id) folder_id = FavoritesFolderID;\r\n var data = {\r\n Mode: opt_mode,\r\n FolderID: folder_id\r\n };\r\n\r\n WA.SRV.call(\"/ModalWindow.asmx/Create\", { ControlName: \"new_document\", Params: $.toJSON(data) }).done(function (data) {\r\n me.setTitle(title);\r\n me.setHtml('
    ' + data.html + '
    ');\r\n me._jWindow = $('#modal_window');\r\n me._postInit();\r\n moveOpenedDialogToCenter();\r\n }).fail(function () {\r\n me.close();\r\n });\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n /**\r\n * Возможность перезаписи функций, с возможностью запуска родительской функции. \r\n * @inner\r\n */\r\n Function.prototype.override = function (func) {\r\n var superFunction = this;\r\n return function () {\r\n this.superFunction = superFunction;\r\n return func.apply(this, arguments);\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n global.CreateDocument = CreateDocument;\r\n})(window.WebAccess.components.dialogs);","\"use strict\";\r\n(function (global) {\r\n\r\n var TEMPLATE = {\r\n LAYOUT: 'layouts/FormDialog.compile.html'\r\n };\r\n\r\n /**\r\n * Диалог для работы с формами.\r\n * @class WebAccess.components.dialogs.FormDialog\r\n * @extends WebAccess.components.dialogs.BaseDialog\r\n * @mixes WebAccess.mixins.formMixin\r\n * @property {Deferred} Init меняет сосотояние при инициализации элементов управления формы\r\n * @property {Object} model переданная в конструктор модель \r\n * @property {String} serviceURL адрес веб-сервиса обслуживающего диалог\r\n * @since 5.2.0.1600 \r\n */\r\n var FormDialog = global.CMP.dialogs.BaseDialog.extend([global.mixins.formMixin], {\r\n className: 'FormDialog',\r\n model: null,\r\n width: 1000,\r\n height: 'auto',\r\n dialogClass: 'form-dialog-content-padding', //если нужно будет поменять padding или убрать его, то не забыть поменять внизу размер этого padding.\r\n serviceURL: \"/Dialogs.asmx\",\r\n modalWindowButtons: null,\r\n\r\n _pendingOperations: null,\r\n _containerInit: null,\r\n _detailsGridInit: null,\r\n _keepAliveTimer: null,\r\n _sideBarContainerSelector: '.twc_left',\r\n _freeAfterClosing: true,\r\n //-----------------------------------------------------------------------// \r\n\r\n init: function (settings, model) {\r\n var me = this;\r\n if (!model) WA.raise(L(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\"));\r\n me.model = model;\r\n me._pendingOperations = {};\r\n\r\n me._preInit();\r\n\r\n me._keepAliveTimer = {\r\n timeout: null\r\n };\r\n\r\n me._containerInit = $.Deferred();\r\n me._detailsGridInit = $.Deferred();\r\n\r\n me._super(settings);\r\n\r\n me.id = me.model.InstanceID;\r\n me._postInit();\r\n me._keepAlive();\r\n\r\n me.bind(me['class'].EVENT.AFTER_CLOSE, $.proxy(me._freeDialog, me));\r\n return this;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n // Инициализация objectList.\r\n _initObjectList: function () {\r\n var me = this;\r\n me.objectList = new global.CMP.wrappers.objectList.ObjectList(me.containerSelector);\r\n },\r\n\r\n /**\r\n * Отобразить диалоговое окно\r\n * @method WebAccess.components.dialogs.FormDialog#show\r\n * @param {object} [showParams] Параметры показа диалога.\r\n * @param {bool} [showParams.freeAfterClosing] TRUE - если нужно освободить серверный объект диалога после закрытия, иначе - FALSE.\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n show: function (showParams = {}) {\r\n var me = this;\r\n var baseShow = me._super; //_beforeShow асинхронный, поэтому _super уже удалится после выполнения метода, сохраняем его чтобы вызвать.\r\n if (showParams.freeAfterClosing !== undefined)\r\n {\r\n //по умолчанию мы всегда освобождаем диалог после закрытия. Но иногда требуется отложить освобождение. \r\n this._freeAfterClosing = showParams.freeAfterClosing;\r\n }\r\n\r\n me._beforeShow().done(function () {\r\n baseShow.apply(me); //если вызвать без apply то this будет равен window.\r\n me._afterShow();\r\n });\r\n\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Запуск таймера для поддержания объекта диалога\r\n * @method WebAccess.components.dialogs.FormDialog#_keepAlive\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _keepAlive: function () {\r\n var me = this;\r\n if (!LockUpdateTime) {\r\n log.warn('DEPRECATION', 'Call to global variable \"LockUpdateTime\" failed');\r\n return;\r\n }\r\n me._keepAliveTimer = setTimeout(function () {\r\n WA.SRV.call(me.serviceURL + '/KeepAlive', {\r\n InstanceID: me.id\r\n }).always(function () {\r\n me._keepAlive();\r\n });\r\n }, LockUpdateTime);\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить модель объекта связанного с текущим диалогом\r\n * @method WebAccess.components.dialogs.FormDialog#_keepAlive\r\n * @private\r\n * @return {String} минимальная модель объекта формы в виде JSON\r\n */\r\n _getObjectLink: function () {\r\n var me = this;\r\n return $.toJSON({\r\n 'InstanceID': me.id\r\n });\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить представление\r\n * @method WebAccess.components.dialogs.FormDialog#_getObjectView\r\n * @private\r\n * @return {String} код представления\r\n */\r\n _getObjectView: function () {\r\n return '';\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n _registerOperation: function (name, operation) {\r\n this._pendingOperations[name] = operation;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n _unRegisterOperation: function (name) {\r\n delete this._pendingOperations[name];\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить информацию о форме\r\n * @method WebAccess.components.dialogs.FormDialog#_getFormData\r\n * @private\r\n * @return {String} модель формы в виде JSON\r\n */\r\n _getFormData: function () {\r\n var me = this;\r\n return $.parseJSON(me.model['FormData']);\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить экземпляры объектов грида\r\n * @method WebAccess.components.dialogs.FormDialog#_getGrids\r\n * @private\r\n * @return {Array} экземпляры гридов\r\n */\r\n _getGrids: function () {\r\n var me = this;\r\n return me.grids;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Создание html разметки и контейнеров\r\n *\r\n * @method WebAccess.components.dialogs.FormDialog#_beforeShow\r\n * @private\r\n * @return {Deferred}\r\n */\r\n _beforeShow: function () {\r\n var me = this;\r\n me.containerSelector = \"div#dialog_content_\" + me.id;\r\n me.modalWindowButtons = [];\r\n me.isShowOkButton = false;\r\n\r\n var state = $.Deferred();\r\n me.width = +(me.model.Width || me.width) + 20; //20 - padding указанный в CSS .form-dialog-content-padding\r\n\r\n //inlineHint плохо работает с фиксированной высотой, поэтому строку ниже закоментировал.\r\n //me.height = me.model.Height || me.height; \r\n me.title = me.model.Caption || me.title;\r\n\r\n if (!me.model['TabsHtml']) {\r\n me.html = me.model['FormHtml'];\r\n state.resolve();\r\n return state;\r\n }\r\n\r\n me.height = me.model.Height || me.height;\r\n me.width += 75; //Ширина табов \r\n\r\n WA.templates.render(TEMPLATE.LAYOUT, {\r\n left: me.model['TabsHtml'],\r\n right: me.model['FormHtml']\r\n }).done(function (html) {\r\n me.html = html;\r\n state.resolve();\r\n })\r\n\r\n return state;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Иницииализация jQuery объектов и навешивание на них событий, \r\n * функция вызывается когда модальное окно и все его элементы загружены.\r\n * @method WebAccess.components.dialogs.FormDialog#_afterShow\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _afterShow: function () {\r\n var me = this;\r\n me._containerInit.resolve();\r\n me._fixStyles();\r\n me._initActions();\r\n\r\n if (!!me.model['TabsHtml']) me._initTabs();\r\n me._initDetails();\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------// \r\n\r\n /**\r\n * Подгонка стилей, чтобы ничего не выпирало. \r\n * @method WebAccess.components.dialogs.FormDialog#_fixStyles\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _fixStyles: function () {\r\n var me = this;\r\n var isAnySelected = me.sideBar.tabs.toArray().some(function (tab) {\r\n if (!isAnySelected && tab.isVisible()) {\r\n tab._jObject.addClass('selected');\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!isAnySelected) me._jContent.find('.tab_item.first').addClass('selected');\r\n if (!InitHoverForButtons) {\r\n log.warn('DEPRECATION', 'Call to global variable \"InitHoverForButtons\" failed');\r\n return;\r\n }\r\n\r\n $('.CardForm').redraw(); //#106605\r\n InitHoverForButtons();\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Инициализация прикладных действий. Навешивание обработчиков на кнопки и ссылки.\r\n * @method WebAccess.components.dialogs.FormDialog#_initActions\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _initActions: function () {\r\n var me = this;\r\n if (me.model && me.model.hasOwnProperty('Actions')) {\r\n var actions = $.parseJSON(me.model.Actions);\r\n var buttons = me.form.controls.buttons.toArray();\r\n var links = me.form.controls.links.toArray();\r\n me._initActionItems(buttons, actions);\r\n me._initActionItems(links, actions);\r\n me.bind(me['class'].EVENT.BEFORE_CLOSE_BY_CROSS, function () {\r\n me._executeDefaultAction(DIALOG_ACTION.CANCEL);\r\n return false;\r\n }).bind(me['class'].EVENT.BEFORE_CLOSE_BY_ESCAPE, function () {\r\n me._executeDefaultAction(DIALOG_ACTION.CANCEL);\r\n return false;\r\n });\r\n }\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Именно здесь кнопки и ссылки с действиями становятся активными и получают\r\n * свои заголовки\r\n * @param {Array} items компоненты\r\n * @param {Object} actions действия\r\n * @method WebAccess.components.dialogs.FormDialog#_initActionItems\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _initActionItems: function (items, actions) {\r\n var me = this;\r\n _(items).each(function (item) {\r\n var action = _(actions).findWhere({ Name: item.actionName });\r\n if (action) {\r\n item.bind('click', function () {\r\n\r\n //#106918\r\n if (!action.Description.HasChangeEventHandler && item.actionName !== DIALOG_ACTION.OK) {\r\n // Не передаем результат, что бы диалог не закрылся, но при \"Отмене\" нужно закрыть в любом случае. #107380\r\n return me._handleAction(name, item.actionName === DIALOG_ACTION.CANCEL ? 2 : undefined);\r\n }\r\n\r\n var process = $.proxy(me._executeDefaultAction, me);\r\n if (me.fire(FormDialog.EVENT.BEFORE_ACTION, item.actionName, action, me) === false) {\r\n return;\r\n };\r\n process(item.actionName);\r\n });\r\n\r\n if (!item.getLabel()) item.setLabel(action.Description.Caption);\r\n item.setTooltip(action.Description.Hint);\r\n if (!action.Description.IsEnabled) {\r\n item.disable();\r\n }\r\n if (!action.Description.IsVisible) {\r\n item.hide();\r\n }\r\n }\r\n });\r\n\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Запуск действия \"по умолчанию\". Т.е. когда обработкой занимается сервер, \r\n * а клиент только говорит какое действие надо вызвать и передает данные формы.\r\n * свои заголовки.\r\n * @param {string} name имя действия \r\n * @method WebAccess.components.dialogs.FormDialog#_executeDefaultAction\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _executeDefaultAction: function (name) {\r\n var me = this;\r\n me.form._unHighlightRequisites();\r\n if (me.fire(FormDialog.EVENT.BEFORE_ACTION, name, me) === false) return me;\r\n\r\n //#106428\r\n if (name === DIALOG_ACTION.CANCEL) {\r\n me._handleAction(name, 2); //аналогично билдеровскому mrCancel=2\r\n return me;\r\n }\r\n // HACK для сохранения изменения в детальных разделах, если после изменения сразу сохранять карточку без клика куда-то в друое место грида.\r\n var allGrids = me.grids;\r\n for (var gridName in allGrids) {\r\n var grid = allGrids[gridName].grid;\r\n var cell = grid.getActiveCell();\r\n if (cell) {\r\n grid.navigateUp();\r\n }\r\n }\r\n\r\n WA.SRV.call(me.serviceURL + '/ExecuteAction', {\r\n DialogInstanceID: me.id,\r\n ActionName: name,\r\n Req: me.form._getRequisitesToSend(me.form),\r\n Cmd: $.toJSON(me.form._commandList)\r\n }, null, null, true).done(function (response) {\r\n var responseAsObject = $.parseJSON(response);\r\n\r\n //скрываем сообщения о предыдущих ошибках, если были\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n }); \r\n\r\n // Обрабатываем изменения реквизитов действием.\r\n var changes = responseAsObject.Changes;\r\n var changedMultiSelects = responseAsObject.ChangedMultiSelectRequisitesValues;\r\n me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n\r\n // Обрабатываем результат выполнения действия.\r\n var result = responseAsObject.Result;\r\n me._handleAction(name, result);\r\n\r\n }).fail(function (err, response) {\r\n me.form._handleFailSave(this, true, null, me.details, me.inlineHint);\r\n\r\n // В ответе с ошибкой могут прийти изменения других реквизитов и их надо будет обработать.\r\n if (response && response.Result) {\r\n var data = $.parseJSON(response.Result);\r\n // Обрабатываем изменения реквизитов действием.\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n }\r\n });\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Пост-обработка действия\r\n * @param {string} name имя действия \r\n * @param {object} result результат выполнения\r\n * @method WebAccess.components.dialogs.FormDialog#_handleAction\r\n * @private\r\n * @return {String} JSON объект с реквизитами\r\n */\r\n _handleAction: function (name, result) {\r\n var me = this;\r\n var preventClose = (me.fire(FormDialog.EVENT.AFTER_ACTION, name, result, me) === false);\r\n\r\n // 0 - когда нажимаем на не стандартную кнопку с custom-действием.\r\n // Вычислений на действии нет. Возвращается 0. В билдере окно не закрывается.\r\n // Мы тоже не будем.\r\n // См. #106093\r\n if ((result && result != 0) && !preventClose) {\r\n me.close();\r\n }\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Поддержка работы табов\r\n * @method WebAccess.components.dialogs.FormDialog#_initTabs\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _initTabs: function () {\r\n var me = this;\r\n me.sideBar.setOrientation(ORIENTATION.VERTICAL);\r\n var jTabs = me._jContent.find('.twc_right .CardForm_Tab');\r\n\r\n // Получить выбранную вкладку\r\n var activeTabDfmName = $('.tab_item.selected').data('name');\r\n jTabs.filter('[data-dfm-name=' + activeTabDfmName + ']').show();\r\n me._jContent.find('.tab_item').not('.more').on('click', function () {\r\n var tabName = $(this).data('name');\r\n\r\n //TODO Шамов А.: События должны fire внутри класса, а не где попало.\r\n me.sideBar.fire(me.sideBar['class'].EVENT.BEFORE_TAB_SWITCH, me.sideBar.tabs[tabName]);\r\n\r\n jTabs = me._jContent.find('.twc_right .CardForm_Tab');\r\n me._jContent.find('.tab_item.selected').removeClass('selected');\r\n $(this).addClass('selected');\r\n jTabs.hide();\r\n jTabs.filter('[data-dfm-name=\"' + tabName + '\"]').show();\r\n\r\n //TODO Шамов А.: События должны fire внутри класса, а не где попало.\r\n me.sideBar.fire(me.sideBar['class'].EVENT.AFTER_TAB_SWITCH, me.sideBar.tabs[tabName]);\r\n });\r\n\r\n if (!me._isFitted) {\r\n me._jDialog.dialog(\"option\", \"height\", 'auto');\r\n };\r\n me._jContent.find('input[type=\"text\"], textarea').not('.Req_Disabled').first().focus().select(); //#106799\r\n $('.CardForm').redraw(); //#106605\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Поддержка работы детальных разделов\r\n * @method WebAccess.components.dialogs.FormDialog#_initDetails\r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _initDetails: function () {\r\n var me = this;\r\n var Initiializer = WebAccess.components.wrappers.details.DetailsInitiializer;\r\n\r\n var DataProviderClass = global.components.dialogs.FormDialogDataProvider;\r\n var dataProviderOptions = {\r\n \"DialogName\": me.model.Name,\r\n \"InstanceID\": me.model.InstanceID\r\n };\r\n\r\n var detailsInitiializer = new Initiializer(me._jContainer.selector + ' div.Reference_Detail',\r\n DataProviderClass,\r\n dataProviderOptions,\r\n WA.components.dataViews.gridPlugins.DetailsContextMenu, me);\r\n detailsInitiializer.bind(Initiializer.EVENT.COMPLETE, function (initiializer) {\r\n me.grids = initiializer.gridInstances;\r\n initiializer.waitForData().done(function () {\r\n me._detailsGridInit.resolve();\r\n });\r\n });\r\n\r\n $.when(me.states.form, me.states.tables).then(function () {\r\n if (!me.form.isExist()) return;\r\n\r\n // Логика работы ведущих/ведомых в дательных разделах.\r\n me.bindLeaderDrivenLogic();\r\n\r\n //Удаляем пустые строки перед сохранением\r\n me.form.bind(\"prepareSave\", function removeEmptyRows() {\r\n for (var tableName in me.form.controls.tables) {\r\n var table = me.form.controls.tables[tableName];\r\n var rows = table.rows.toArray();\r\n var lastRow = rows[rows.length - 1];\r\n\r\n if (rows.length && lastRow && !lastRow.hasFilledRequisites() && !lastRow._locked) {\r\n table.deleteRow(lastRow.getRowId(), true);\r\n }\r\n }\r\n });\r\n });\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить высоту диалога\r\n * @private\r\n */\r\n _getAvailableHeight: function () {\r\n return this.model.Height;\r\n },\r\n\r\n /**\r\n * Освободить серверный объект API при закрытии диалога.\r\n * setTimeout используется, потому что грид инициализируется асинхронно,\r\n * и запросы могут посыпаться позже, чем мы сделаем freeDialog.\r\n * @method WebAccess.components.dialogs.FormDialog#_freeDialog \r\n * @private\r\n * @return {WebAccess.components.dialogs.FormDialog}\r\n */\r\n _freeDialog: function () {\r\n var me = this;\r\n\r\n if (me._freeAfterClosing) {\r\n setTimeout(function () {\r\n clearTimeout(this._keepAliveTimer);\r\n _(me.grids).each(function (grid, name) {\r\n clearTimeout(grid._queryDelay);\r\n })\r\n _(me._pendingOperations).each(function (operation, name) {\r\n operation.abort();\r\n });\r\n WA.SRV.call(me.serviceURL + '/FreeDialog', {\r\n InstanceID: me.id\r\n });\r\n }, 300);\r\n }\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Выполняет прикладной метод.\r\n *\r\n * @method FormDialog.executeEntityMethod\r\n * @param {string} methodName Имя прикладного метода.\r\n * @param {Array} opt_parameters Параметры, с которыми должен вызываться прикладной метод.\r\n * @return {Deferred} Результат выполнения прикладного метода.\r\n * @since 5.5.0.1000\r\n * @see https://api.jquery.com/category/deferred-object/\r\n *\r\n * @example \r\n * WebAccess.current.executeEntityMethod('MethodName', new WA.Link()).done(function(result) { console.log(result); });\r\n */\r\n executeEntityMethod: function (methodName, opt_parameters) {\r\n var d = $.Deferred();\r\n var me = this;\r\n var parameters = Array.prototype.slice.call(arguments, 1);\r\n\r\n WA.domainMethods.executeEntityMethod(\"/api/Dialog.asmx/ExecuteEntityMethod\",\r\n this.id, \"\", methodName, parameters).done(function (res) {\r\n var changes = res.Changes;\r\n var changedMultiSelects = res.ChangedMultiSelectRequisitesValues;\r\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n\r\n d.resolve(res.MethodResult);\r\n }).fail(function (errorMessage, res) {\r\n if (res) {\r\n if (res.Result) {\r\n var data = res.Result;\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n if (me.form && me.form.isExist()) me.form.applyServerSideChanges(changes, changedMultiSelects);\r\n }\r\n d.reject(res.Error);\r\n } else {\r\n d.reject(errorMessage);\r\n }\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Проверяет, доступен ли прикладной метод для текущего диалога.\r\n * @function FormDialog.isMethodAvailable\r\n * @param {string} methodName Имя прикладного метода.\r\n * @return {boolean} true, если метод доступен для текущего диалога, иначе false.\r\n * @since 5.5.0.1000\r\n */\r\n isMethodAvailable: function (methodName) {\r\n return WA.domainMethods.isMethodAvailable(\"/api/Dialog.asmx/IsEntityMethodAvailable\", this.id, methodName);\r\n }\r\n\r\n\r\n //-----------------------------------------------------------------------//\r\n\r\n }, {\r\n EVENT: $.extend({\r\n /**\r\n * Срабатывает перед началом выполнения действия. \r\n * Можно остановить запуск действия \"по умолчанию\" возвратив false в обработчике события.\r\n * Затем можно продолжить запуск действия \"по умолчанию\" взывав функцию action.\r\n * @event WebAccess.components.dialogs.FormDialog.EVENT.BEFORE_ACTION\r\n * @param {string} actionName имя действия\r\n * @param {function} action действие по умолчанию\r\n * @param {WebAccess.components.dialogs.FormDialog} dialog экземпляр диалога\r\n */\r\n BEFORE_ACTION: 'beforeAction',\r\n\r\n /**\r\n * Срабатывает после выполнения действия. \r\n * Можно предотвратить закрытие диалога, возвратив false в обработчике события.\r\n * @event WebAccess.components.dialogs.FormDialog.EVENT.AFTER_ACTION\r\n * @param {string} actionName имя действия\r\n * @param {object} result результат выполнения действия. Данные которые возвращает сервер.\r\n * @param {WebAccess.components.dialogs.FormDialog} dialog экземпляр диалога\r\n */\r\n AFTER_ACTION: 'afterAction'\r\n }, global.components.dialogs.BaseDialog.EVENT)\r\n });\r\n\r\n //-------------------------------------------------------------------------//\r\n\r\n global.components.dialogs.FormDialog = FormDialog;\r\n})(window.WebAccess);","\"use strict\";\r\n(function FormDialogDataProviderDefinition(global) {\r\n\r\n /**\r\n * Провайдер данных детальных разделов диалога.\r\n * @since 5.2.0.1600\r\n * @class WebAccess.components.dialogs.FormDialogDataProvider\r\n * @extends WebAccess.components.dataViews.BaseDataProvider\r\n * @property {Object} defaults конфигурация \"по-умолчанию\"\r\n */\r\n var FormDialogDataProvider = WA.CMP.dataViews.BaseDataProvider.extend({\r\n _DFMName: null,\r\n _form: null,\r\n init: function(initialState, form) {\r\n var me = this;\r\n me._form = form; \r\n me._super(initialState);\r\n\r\n // Для сохранения состояния.\r\n me._dialogName = initialState.DialogName;\r\n me._detailSectionNumber = initialState.DetailSectionNumber;\r\n me._DFMName = initialState.DFMName;\r\n\r\n me.defaults = {}; \r\n $.extend(me.defaults, initialState);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Формирует параметры запросов.\r\n * @method WebAccess.components.dialogs.FormDialogDataProvider#makeParams\r\n * @param {Object} loadOptions Параметры запроса.\r\n * @return {Object} Расширенные параметры запроса.\r\n * @since 5.2.0.1600\r\n */\r\n makeParams: function (loadOptions) {\r\n return this.extendDefaults(loadOptions);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Загружает данные детального раздела.\r\n * @method WebAccess.components.dialogs.FormDialogDataProvider#load\r\n * @param {Object} loadOptions Параметры запроса.\r\n * @return {Deferred} Результат загрузки данных.\r\n * @since 5.2.0.1600 \r\n */\r\n load: function (loadOptions) {\r\n var me = this;\r\n var result = new $.Deferred();\r\n\r\n var operation = WA.SRV.call('/Dialogs.asmx/GetDetailsData', me.makeParams(loadOptions));\r\n me._form._registerOperation('load' + me._DFMName, operation); \r\n operation.done(function (data) {\r\n result.resolve({ Rows: $.parseJSON(data) });\r\n }).fail(function (e) {\r\n WA.ready(function () {\r\n var severity = (e.Severity !== \"-1\" ? Number(e.Severity) : undefined);\r\n WA.CR.inlineHint.show(e, '', severity, INLINE_HINT_PRIORITY.PRIMARY);\r\n });\r\n result.resolve({ Rows: [] });\r\n }).always(function () {\r\n me._form._unRegisterOperation('load' + me._DFMName);\r\n });\r\n\r\n return result.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Загружает сохранненные настройки детального раздела из профиля пользователя.\r\n * @method WebAccess.components.dialogs.FormDialogDataProvider#loadState\r\n * @return {Deferred} Результат загрузки состояние.\r\n * @since 5.2.0.1600\r\n */\r\n loadState: function () {\r\n var me = this;\r\n var result = $.Deferred();\r\n\r\n var jTable = $('#' + me._DFMName);\r\n var data = jTable.data('state');\r\n if (data && data[\"InstanceID\"]) {\r\n delete data[\"InstanceID\"]; //В профиле может быть неактуальная ссылка\r\n }\r\n if (data && data[\"DetailSectionNumber\"]) {\r\n delete data[\"DetailSectionNumber\"];\r\n }\r\n result.resolve(data);\r\n\r\n return result.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохраняет настройки детального раздела в профиль пользователя.\r\n * @method WebAccess.components.dialogs.FormDialogDataProvider#saveState\r\n * @param {Object} loadOptions Параметры запроса.\r\n * @return {Deferred} Результат сохранения состояния.\r\n * @since 5.2.0.1600\r\n */\r\n saveState: function (loadOptions) {\r\n var me = this;\r\n var result = $.Deferred();\r\n clearTimeout(me._saveSateTimeout);\r\n var operation = WA.cache.serverCache.setItem(me._makeKey(), me.makeParams(loadOptions));\r\n me._form._registerOperation('saveState' + me._DFMName, operation);\r\n me._saveSateTimeout = setTimeout(function () {\r\n operation.done(function () { \r\n result.resolve();\r\n }).fail(function () {\r\n result.reject();\r\n }).always(function () {\r\n me._form._unRegisterOperation('saveState' + me._DFMName);\r\n });\r\n }, 200);\r\n return result.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Формирует ключ для хранения настроек в профиле пользователя.\r\n * @method WebAccess.components.dialogs.FormDialogDataProvider#_makeKey\r\n * @return {String} Ключ для хранения в профиле пользователя.\r\n * @since 5.2.0.1600\r\n * @private\r\n */\r\n _makeKey: function () {\r\n var me = this;\r\n //Формат: [имя диалога, представление, номер детального раздела].\r\n return $.toJSON([me._dialogName, '', '' + me._detailSectionNumber]).replaceAll(' ', '');\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n // Публичные объекты.\r\n global.FormDialogDataProvider = FormDialogDataProvider;\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.WebAccess.components.dialogs);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n* Диалог для работы с формами запроса параметров отчетов.\r\n* @class WebAccess.components.dialogs.ReportParamsDialog\r\n* @extends WebAccess.components.dialogs.FormDialog\r\n* @mixes WebAccess.mixins.formMixin\r\n* @property {Deferred} Init меняет сосотояние при инициализации элементов управления формы\r\n* @property {Object} model переданная в конструктор модель \r\n* @property {String} serviceURL адрес веб-сервиса обслуживающего диалог\r\n* @since 5.2.0.1931 \r\n*/\r\n var ReportParamsDialog = global.FormDialog.extend({\r\n className: 'ReportParamsDialog',\r\n width: \"600\",\r\n title: L('REPORT_ASKABLE_PARAMS'),\r\n\r\n init: function (settings, model) {\r\n if (!model) WA.raise(L(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\"));\r\n\r\n var me = this;\r\n var formData = JSON.parse(model.FormData);\r\n me.model = model;\r\n me.requisitesModels = formData.req;\r\n\r\n me._fillHiddenParamsCallback = formData._fillHiddenParamsCallback;\r\n\r\n me.isShowOkButton = true;\r\n me.isShowCancelButton = true;\r\n\r\n me._pendingOperations = {};\r\n me._preInit();\r\n me._containerInit = $.Deferred();\r\n me._detailsGridInit = $.Deferred();\r\n me._postInit();\r\n\r\n me._setKeyBindings();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Создание html разметки и контейнеров\r\n *\r\n * @method WebAccess.components.dialogs.ReportParamsDialog#_beforeShow\r\n * @private\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _beforeShow: function () {\r\n var def = $.Deferred();\r\n var me = this;\r\n\r\n // WindowModal возвращает разметку в притык, без отступов, поэтому добавляемых их вручную.\r\n me.model.FormHtml = format('
    {0}
    ', me.model.FormHtml);\r\n\r\n me._super().done(function () {\r\n me.isShowOkButton = true;\r\n def.resolve();\r\n });\r\n\r\n return def;\r\n },\r\n\r\n /**\r\n * Проверить заполненность обязательных реквизитов.\r\n * Если реквизиты не заполнены они подсвечиваются на форме.\r\n * @method WebAccess.components.dialogs.ReportParamsDialog#validateForm\r\n * @return {WebAccess.components.dialogs.ReportParamsDialog}\r\n */\r\n validateForm: function () {\r\n\r\n if (this._fillHiddenParamsCallback) {\r\n var hiddenParams = window[this._fillHiddenParamsCallback]();\r\n for (var reqKey in hiddenParams) {\r\n var currentReq = this.form.requisites[reqKey];\r\n if (currentReq) {\r\n currentReq.setValue(hiddenParams[reqKey], hiddenParams[reqKey]);\r\n }\r\n }\r\n }\r\n\r\n var requisites = this.form.requisites;\r\n window.req = requisites;\r\n var isValid = true;\r\n\r\n for (var name in requisites) {\r\n var requisite = requisites[name];\r\n if (requisite.isRequired && requisite.isRequired() && !requisite.getValue()) {\r\n requisite.highlight();\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (!isValid) {\r\n this.inlineHint.showError(L('NOT_ALL_REQUIRED_FIELDS_FILLED'));\r\n WA.raise(L('NOT_ALL_REQUIRED_FIELDS_FILLED'));\r\n }\r\n\r\n return this;\r\n }\r\n });\r\n\r\n global.ReportParamsDialog = ReportParamsDialog;\r\n})(window.WebAccess.components.dialogs);","\"use strict\";\r\n\r\n(function (globalWebAccess) {\r\n\r\n var FLOAT_DIALOG_TEMPLATE = '/layouts/FloatDialog.compile.html';\r\n\r\n /**\r\n * Всплывающее диалоговое окно\r\n *\r\n * @class WebAccess.components.dialogs.FloatDialog\r\n * @extends BaseObject\r\n * @property {String} id ИД диалогового окна\r\n * @property {Object} settings Настройки диалогового окна\r\n * @since 5.4.0.1000\r\n */\r\n\r\n var FloatDialog = BaseObject.extend({\r\n\r\n // Конструктор.\r\n init: function (id, settings) {\r\n var me = this;\r\n\r\n me.id = id;\r\n me.settings = settings;\r\n if ($.isPlainObject(settings)) {\r\n $.extend(this, settings);\r\n }\r\n me._inited = $.Deferred();\r\n\r\n me._createHtml(); //асинхронная\r\n },\r\n\r\n _createHtml: function () {\r\n var me = this;\r\n\r\n var floatDialogTemplate = WA.templates.render(FLOAT_DIALOG_TEMPLATE, $.extend({\r\n id: me.id,\r\n title: '',\r\n showMinimizeButton: true,\r\n minimized: false,\r\n showCloseButton: true,\r\n contentAsHtml: '',\r\n isLoading: true,\r\n hidden: false,\r\n loadingText: L('LOADING')\r\n }, me.settings));\r\n\r\n // Когда отрендерятся все шаблоны, создаем из них DOM элементы.\r\n $.when(floatDialogTemplate).done(function (html) {\r\n me._jDialog = $(html);\r\n\r\n me._jTitle = me._jDialog.find('.float-dialog__header-title');\r\n me._jMinimizingIcon = me._jDialog.find('.float-dialog__header-icon_toggle-size');\r\n me._jCloseIcon = me._jDialog.find('.float-dialog__header-icon_close');\r\n me._jContentArea = me._jDialog.find('.float-dialog__content-area');\r\n me._jContent = me._jContentArea.find('.float-dialog__content');\r\n me._jLoading = me._jDialog.find('.float-dialog__loading');\r\n me._jLoadingText = me._jLoading.find('.float-dialog__loading-text');\r\n\r\n me._bindEvents();\r\n\r\n if ($('#' + me.id).length === 0) {\r\n me._jDialog.addClass('float-dialog_hidden');\r\n me._jDialog.appendTo('body');\r\n }\r\n // Инициализация закончилась.\r\n me._inited.resolve();\r\n });\r\n },\r\n\r\n // Навешивает события на элементы диалога.\r\n _bindEvents: function () {\r\n var me = this;\r\n\r\n me._jMinimizingIcon.on('click', function () {\r\n me.setMinimized(!me.isMinimized(), true);\r\n });\r\n me._jCloseIcon.on('click', function () {\r\n if (me.fire(me['class'].EVENT.BEFORE_CLOSE, me) === false) return false;\r\n me.hide();\r\n me.fire(me['class'].EVENT.AFTER_CLOSE, me);\r\n });\r\n },\r\n\r\n /**\r\n * Добавляет диалоговое окно на страницу и отображает его.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#show\r\n */\r\n show: function () {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n me._jDialog.removeClass('float-dialog_hidden');\r\n });\r\n },\r\n\r\n /**\r\n * Скрывает диалоговое окно.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#hide\r\n */\r\n hide: function () {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n // Минимизировать для анимации сворачивания.\r\n me.setMinimized(true);\r\n me._jDialog.addClass('float-dialog_hidden');\r\n });\r\n },\r\n\r\n /**\r\n * Устанавливает новый заголовок диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#setTitle\r\n * @param {string} newTitle Заголовок диалога\r\n */\r\n setTitle: function (newTitle) {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n me._jTitle.text(newTitle);\r\n });\r\n },\r\n\r\n /**\r\n * Устанавливает новый заголовок диалогового окна в формате HTML.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#setTitleAsHtml\r\n * @param {string} newTitleHtml Заголовок диалога в формате HTML\r\n */\r\n setTitleAsHtml: function (newTitleHtml) {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n me._jTitle.html(newTitleHtml);\r\n });\r\n },\r\n\r\n /**\r\n * Устанавливает содержимое диалогового окна в формате HTML.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#setContentAsHtml\r\n * @param {string} contentAsHtml Содержимое диалогового окна в формате HTML\r\n * @param {function} callback Функция, которая будет вызвана при установке значения содержимого\r\n */\r\n setContentAsHtml: function (contentAsHtml, callback) {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n me._jLoading.hide();\r\n me._jContent.html(contentAsHtml);\r\n me._jContent.show();\r\n if (callback) callback();\r\n });\r\n },\r\n\r\n /**\r\n * Устанавливает содержимое диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#setContent\r\n * @param {string} content Содержимое диалогового окна\r\n * @param {function} callback Функция, которая будет вызвана при установке значения содержимого\r\n */\r\n setContent: function (content, callback) {\r\n this.setContentAsHtml('
    ' + content + '
    ', callback);\r\n },\r\n\r\n /**\r\n * Показывает сообщение о загрузке.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#showLoader\r\n * @param {string} text Текст сообщения о загрузке\r\n */\r\n showLoader: function (text) {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n if (text) {\r\n me._jLoadingText.text(text);\r\n }\r\n me._jContent.hide();\r\n me._jLoading.show();\r\n });\r\n },\r\n\r\n /**\r\n * Проверяет, минимизировано ли диалоговое окно.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#isMinimized\r\n * @return {boolean} True – диалоговое окно минимизировано, иначе False.\r\n */\r\n isMinimized: function () {\r\n var me = this;\r\n return me._jDialog.hasClass('float-dialog_minimized');\r\n },\r\n\r\n /**\r\n * Проверяет, развернул ли пользователь диалоговое окно.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#isUserExpanded\r\n * @return {boolean} True – диалоговое окно развернуто, иначе False.\r\n */\r\n isUserExpanded: function () {\r\n var me = this;\r\n return WA.cache.getItem('floatdialog.' + me.id + '.expanded') === '1';\r\n },\r\n\r\n /**\r\n * Устанавливает признак минимизации диалогового окна.\r\n *\r\n * @method WebAccess.components.dialogs.FloatDialog#setMinimized\r\n * @param {boolean} isMinimized Признак минимизации диалогового окна\r\n * @param {boolean} saveState Признак сохранения состояния диалогового окна\r\n */\r\n setMinimized: function (isMinimized, saveState) {\r\n var me = this;\r\n $.when(me._inited).done(function () {\r\n if (isMinimized) {\r\n // Сворачиваем.\r\n me._jDialog.addClass('float-dialog_minimized');\r\n me._jContentArea.addClass('float-dialog__content-area_minimized');\r\n me._jLoading.hide();\r\n me._jMinimizingIcon.removeClass('float-dialog__header-icon_toggle-size_maximized');\r\n } else {\r\n // Разворачиваем.\r\n me._jDialog.removeClass('float-dialog_minimized');\r\n me._jContentArea.removeClass('float-dialog__content-area_minimized');\r\n me._jMinimizingIcon.addClass('float-dialog__header-icon_toggle-size_maximized');\r\n\r\n me._jContent.niceScroll({\r\n cursorcolor: \"#d8dce3\",\r\n cursorwidth: \"6px\",\r\n cursorborder: \"0\",\r\n autohidemode: \"false\",\r\n cursorborderradius: \"0\",\r\n railpadding: { right: 3 },\r\n horizrailenabled: false,\r\n railalign: \"right\"\r\n });\r\n }\r\n });\r\n\r\n if (saveState)\r\n WA.cache.setItem('floatdialog.' + me.id + '.expanded', isMinimized ? '0' : '1');\r\n }\r\n }, {\r\n EVENT: {\r\n\r\n /**\r\n * Срабатывает перед закрытием модального окна.\r\n * Можно предотвратить закрытие диалогового окна, вернув false в обработчике события.\r\n *\r\n\t * @event WebAccess.components.dialogs.FloatDialog.EVENT.BEFORE_CLOSE\r\n * @param {WebAccess.components.dialogs.FloatDialog} dialog Экземпляр диалога\r\n * @since 5.4.0.1004\r\n */\r\n BEFORE_CLOSE: 'beforeClose',\r\n\r\n /**\r\n * Срабатывает после закрытия диалогового окна.\r\n *\r\n\t * @event WebAccess.components.dialogs.FloatDialog.EVENT.AFTER_CLOSE\r\n * @param {WebAccess.components.dialogs.FloatDialog} dialog Экземпляр диалога\r\n * @since 5.4.0.1004\r\n */\r\n AFTER_CLOSE: 'close'\r\n }\r\n });\r\n\r\n // ---------------------------------------------------------------------------------------------------\r\n globalWebAccess.components.dialogs.FloatDialog = FloatDialog;\r\n\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n\r\n/**\r\n* Контекстное меню.\r\n* Отображается по нажатию левой кнопкой мыши на элемент. После отображения не может быть изменено.\r\n* Для создания другого набора элементов следует использовать новый объект.\r\n*\r\n* @class WebAccess.components.menus.BaseContextMenu\r\n* @since 5.0.0.4000\r\n* @extends BaseObject\r\n* @param {string} itemSelector Существующий элемент страницы\r\n* @param {WebAccess.components.menus.BaseContextMenu.contextMenuItem} [opt_menuItems] Массив со списком пунктов меню\r\n* @param {WebAccess.components.menus.BaseContextMenu.contextMenuSettings} [opt_settings] Параметры контекстного меню\r\n* @throws ERR_ELEMENT_DOES_NOT_EXIST - указанного элемента страницы не существует.\r\n* @fires Следует использовать параметр itemSelect с передачей выбранного элемента.\r\n* @example\r\n* function CreateReferenceFiltersMenu(selector, data) {\r\n* var menu = new WA.components.menus.BaseContextMenu(selector,data);\r\n* menu.render();\r\n* menu.bind(\"itemSelect\", function(item) {\r\n* grid.PerformCallback(['CHANGEFILTER', item.name, item.label]);\r\n* $(selector).html(item.label);\r\n* });\r\n* };\r\n*/\r\n\r\n/**\r\n * Пункт меню.\r\n * @typedef {Object} WebAccess.components.menus.BaseContextMenu.contextMenuItem\r\n * @since 5.0.0.4000\r\n * @property {string} name Имя пункта меню\r\n * @property {string} label Заголовок пункта меню\r\n * @property {string} [icon] Иконка рядом с заголовком\r\n * @property {boolean} [bottomSeparator] Признак необходимости добавления разделителя ниже пункта меню\r\n * @property {boolean} [selected] Признак того, что объект выбран\r\n * @property {string} [tooltip] Подсказка при наведенииы\r\n * @example\r\n * var menuItems = [\r\n * {\"name\": \"-1\",\r\n * \"label\": L(\"DEFAULT_EMPTY_FILTER\"),\r\n * \"bottomSeparator\": true\r\n * }];\r\n */\r\n\r\n/**\r\n * Параметры контекстного меню.\r\n * @typedef {Object} WebAccess.components.menus.BaseContextMenu.contextMenuSettings\r\n * @since 5.0.0.4000\r\n * @property {string} [shiftY] Величина верхнего отступа\r\n * @property {string} [width] Ширина меню\r\n * @property {function} [onShow] Ссылка на функцию, которая будет выполнена при отображении меню\r\n * @property {function} [onHide] Ссылка на функцию, которая будет выполнена при скрытии меню\r\n * @example\r\n * var settings = [\r\n * {\"shiftY\": 100,\r\n * \"width\": 300,\r\n * \"onShow\": function( ) { alert(\"onShow\"); }\r\n * }];\r\n */\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n//\r\n(function (global) {\r\n var BaseContextMenu = BaseObject.extend({\r\n\r\n className: 'BaseContextMenu',\r\n items: [],\r\n settings: {},\r\n _imageWidth: 16,\r\n _imageHeight: 16,\r\n _isRendered: false,\r\n _menu: null,\r\n\r\n init: function (itemSelector, opt_menuItems, opt_settings) {\r\n log.info('CONTEXT_MENU', 'Init context menu for ' + itemSelector);\r\n var instance = this;\r\n\r\n this.items = (!!opt_menuItems) ? opt_menuItems : [];\r\n this.settings = { imageWidth: this._imageWidth, imageHeight: this._imageWidth };\r\n if (!$.isEmptyObject(opt_settings)) $.extend(this.settings, opt_settings);\r\n\r\n this._super(itemSelector);\r\n this._jObject = $(itemSelector);\r\n if (this._jObject.length <= 0) WA.raise(\"ERR_ELEMENT_DOES_NOT_EXIST\", itemSelector);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _makeMenuObject: function () {\r\n var me = this;\r\n //if (!!this._menu) return this;\r\n for (var i = 0; i < me.items.length; ++i) {\r\n me.items[i].text = escapeHtml(me.items[i].label).trunc(50) || me.items[i].text; //чтобы было как везде, ближе к эталонам\r\n me.items[i].image = me.items[i].icon;\r\n me.items[i].hoverImage = me.items[i].hoverIcon;\r\n if (me.items[i].selected && !me.items[i].image) {\r\n me.items[i].image = \"/App_Sprites/menu_check.png\";\r\n }\r\n me.items[i].onClick = (!!me.items[i].onClick) ? me.items[i].onClick : function (item, menu, event) { me.fire(\"itemSelect\", item, menu, event); };\r\n }\r\n this._menu = new ContextMenu(this.items, this.settings);\r\n return this;\r\n },\r\n\r\n /**\r\n * Добавить новый пункт меню.\r\n * @method WebAccess.components.menus.BaseContextMenu#addItem\r\n * @param {string} name Имя пункта меню\r\n * @param {string} label Заголовок пункта меню\r\n * @param {string} [opt_icon] Значок рядом с заголовком\r\n * @param {boolean} [opt_bottomSeparator] Признак необходимости добавления разделителя после пункта меню\r\n * @param {boolean} [opt_selected] Признак того, что объект выбран\r\n * @param {boolean} [opt_disabled] Признак того, что объект доступен\r\n * @throws ERR_OBJECT_IS_ALREADY_RENDERED - объект уже отображен.\r\n * @return {WebAccess.components.menus.BaseContextMenu} Объект типа BaseContextMenu.\r\n * @todo Возможность принятия WebAccess.components.menus.contextMenuItem.\r\n */\r\n addItem: function (name, label, opt_icon, opt_bottomSeparator, opt_selected, opt_disabled, opt_tooltip) {\r\n if (!this._isRendered) {\r\n var instance = this;\r\n this.items.push({\r\n 'name': name,\r\n 'label': escapeHtml(label).trunc(50),\r\n \"image\": opt_icon,\r\n \"bottomSeparator\": (opt_bottomSeparator || false),\r\n \"selected\": (opt_selected || false),\r\n \"disabled\": (opt_disabled || false),\r\n \"tooltip\": (opt_tooltip || '')\r\n });\r\n return this;\r\n } else {\r\n return WA.raise(\"ERR_OBJECT_IS_ALREADY_RENDERED\");\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить выбранный пункт меню.\r\n * @method WebAccess.components.menus.BaseContextMenu#getSelectedItem\r\n * @return {WebAccess.components.menus.BaseContextMenu.contextMenuItem} Объект типа BaseContextMenu.contextMenuItem.\r\n */\r\n getSelectedItem: function () {\r\n return this.items[getElementIndexByAttr(this.items, \"selected\", true)];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить выбранный пункт меню.\r\n * @method WebAccess.components.menus.BaseContextMenu#setSelectedItem\r\n * @param {string} name Имя пункта меню.\r\n * @param {boolean} isSelected Выбран или нет пункт меню.\r\n * @param {string} opt_icon Новая иконка.\r\n * @return {WebAccess.components.menus.BaseContextMenu} Объект типа BaseContextMenu.\r\n */\r\n setSelectedItem: function (name, isSelected, opt_icon, opt_iconCSSClass) {\r\n var me = this;\r\n\r\n isSelected = (isSelected !== false);\r\n\r\n var item = me.items[getElementIndexByAttr(me.items, \"name\", name)];\r\n item.selected = isSelected;\r\n item.icon = _.isUndefined(opt_icon) ? item.icon : opt_icon;\r\n item.image = item.icon;\r\n if (isSelected) {\r\n if (!item.image) {\r\n item.image = \"/App_Sprites/menu_check.png\";\r\n } else if (opt_iconCSSClass) {\r\n item.iconCSSClass = opt_iconCSSClass;\r\n }\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает меню.\r\n * Метод может быть вызван только один раз – когда все пункты меню уже переданы.\r\n * @method WebAccess.components.menus.BaseContextMenu#render\r\n * @throws ERR_OBJECT_IS_ALREADY_RENDERED - объект уже отображен.\r\n * @return {WebAccess.components.menus.BaseContextMenu} Объект типа BaseContextMenu.\r\n */\r\n render: function (force) {\r\n var me = this;\r\n if (!!me._isRendered && !force) return WA.raise(\"ERR_OBJECT_IS_ALREADY_RENDERED\");\r\n this._makeMenuObject();\r\n this._isRendered = true;\r\n this._jObject.contextMenu(this._menu);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отобразить меню. (Альтернативыный способ, c исходного события)\r\n * @method WebAccess.components.menus.BaseContextMenu#show\r\n * @param {object} [opt_event] DOM-событие вызывающее данный метод\r\n * @return {WebAccess.components.menus.BaseContextMenu} Объект типа BaseContextMenu.\r\n * @since 5.2.0.1300\r\n */\r\n show: function (opt_event) {\r\n this._makeMenuObject();\r\n this._menu.show(null, null, opt_event);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отобразить меню в указанных координатах.\r\n * @method WebAccess.components.menus.BaseContextMenu#showAt\r\n * @param {integer} x Координата по горизонтали\r\n * @param {integer} y Координата по вертикали\r\n * @param {object} [opt_event] DOM-событие вызывающее данный метод\r\n * @return {WebAccess.components.menus.BaseContextMenu} Объект типа BaseContextMenu.\r\n * @since 5.2.0.1300\r\n */\r\n showAt: function (x, y, opt_event) {\r\n this._makeMenuObject();\r\n this._menu.showAt({ left: x, top: y }, null, null, opt_event);\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.BaseContextMenu = BaseContextMenu;\r\n})(window.WebAccess.components.menus);\r\n","\"use strict\";\r\n\r\n/**\r\n* Контекстное меню в виде горизонтально расположенных иконок.\r\n*\r\n* @class WebAccess.components.menus.OnlyIconsContextMenu\r\n* @since 5.0.0.4200\r\n* @extends WebAccess.components.menus.BaseContextMenu\r\n* @param {string} itemSelector Существующий элемент страницы\r\n* @param {WebAccess.components.menus.BaseContextMenu.contextMenuItem} [opt_menuItems] Массив со списком пунктов меню\r\n* @param {WebAccess.components.menus.BaseContextMenu.contextMenuSettings} [opt_settings] Параметры контекстного меню\r\n* @param {string} [opt_settings] ИД элемента страницы\r\n* @property WebAccess.components.menus.OnlyIconsContextMenu#jMenu jQuery элемент текущего отрисованного меню\r\n* @property WebAccess.components.menus.OnlyIconsContextMenu#controlId ИД элемента на страницы\r\n* @example\r\n* // При наведении мыши на логотип Directum откроется контекстное меню.\r\n* var menu = new window.WebAccess.components.menus.OnlyIconsContextMenu(\"#logo\", [{\r\n* name: \"itemName\",\r\n* text: \"text\",\r\n* image: \"ToolbarAndTab/SaveAndExit_16.png\",\r\n* imageCSSClass: \"availableStatuses[i]\",\r\n* selected: true\r\n* }], {}, \"menuId\");\r\n* menu.render();\r\n*\r\n* menu.bind('itemSelect', function (item) {\r\n* console.log(item);\r\n* });\r\n*\r\n* $(\"#logo\").hover(function() { menu.show() },function() { menu.hide() } );\r\n*/\r\n(function (global) {\r\n var OnlyIconsContextMenu = global.BaseContextMenu.extend({\r\n init: function (element, opt_menuItems, opt_settings, opt_controlId) {\r\n var me = this;\r\n me._super(element, opt_menuItems, opt_settings);\r\n me.controlId = opt_controlId || 'onlyIconsContextMenu';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: 'OnlyIconsContextMenu',\r\n controlId: 'onlyIconsContextMenu',\r\n jMenu: null,\r\n\r\n /**\r\n * Отобразить контекстое меню.\r\n * Метод может быть вызван только один раз – когда все пункты меню уже переданы.\r\n * @method WebAccess.components.menus.OnlyIconsContextMenu#render\r\n * @throws ERR_OBJECT_IS_ALREADY_RENDERED - объект уже отображен.\r\n * @return {WebAccess.components.menus.OnlyIconsContextMenu} Oбъект типа OnlyIconsContextMenu.\r\n */\r\n render: function (force) {\r\n var me = this;\r\n var i;\r\n if (!!me._isRendered && !force) return WA.raise(\"ERR_OBJECT_IS_ALREADY_RENDERED\");\r\n\r\n // Удяляем элемент с таким ИД.\r\n $('#' + me.controlId).remove();\r\n\r\n // Генерируем HTML.\r\n var html = '
    ';\r\n for (i = 0; i < me.items.length; i++) {\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n }\r\n html += '
    ';\r\n me.jMenu = $(html);\r\n\r\n // Навешиваем события на элементы списка.\r\n var itemEls = me.jMenu.find('.item');\r\n for (i = 0; i < me.items.length; i++) {\r\n var onClick = (function (item) {\r\n return function () {\r\n me.jMenu.find('.selected').removeClass('selected');\r\n $(this).addClass('selected');\r\n me.fire(\"itemSelect\", item);\r\n };\r\n })(me.items[i]);\r\n itemEls.eq(i)\r\n .on('click.onlyIconsCM', onClick);\r\n }\r\n me._isRendered = true;\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отобразить меню в координатах переданного элемента.\r\n * @method WebAccess.components.menus.OnlyIconsContextMenu#show\r\n * @return {WebAccess.components.menus.OnlyIconsContextMenu} Oбъект типа OnlyIconsContextMenu.\r\n */\r\n show: function () {\r\n var me = this;\r\n if ($('#' + me.controlId).length === 0) {\r\n $('body').append(me.jMenu);\r\n }\r\n var jObjOffset = me._jObject.offset();\r\n me.jMenu.css({\r\n 'position': 'absolute',\r\n 'left': Math.round(jObjOffset.left),\r\n 'top': Math.round(jObjOffset.top)\r\n });\r\n me.jMenu.show();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отобразить меню в переданном элементе.\r\n * @method WebAccess.components.menus.OnlyIconsContextMenu#showIn\r\n * @param {string} container Селектор или контейнер\r\n\t * @param {boolean} atTop Признак, выше или ниже контейнера должно быть вставлено меню\r\n * @return {WebAccess.components.menus.OnlyIconsContextMenu} Oбъект типа OnlyIconsContextMenu.\r\n */\r\n showIn: function (container, atTop) {\r\n var me = this;\r\n if (atTop === true) {\r\n $(container).prepend(me.jMenu);\r\n } else {\r\n $(container).append(me.jMenu);\r\n }\r\n me.jMenu.show();\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть контекстное меню.\r\n * @method WebAccess.components.menus.OnlyIconsContextMenu#hide\r\n * @return {WebAccess.components.menus.OnlyIconsContextMenu} Oбъект типа OnlyIconsContextMenu.\r\n */\r\n hide: function () {\r\n this.jMenu.hide();\r\n return me;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.OnlyIconsContextMenu = OnlyIconsContextMenu;\r\n})(window.WebAccess.components.menus);","\"use strict\";\r\n\r\n\r\n/**\r\n* Генератор форм.\r\n*\r\n* @example\r\n* var form = new WebAccess.components.forms.FormBuilder(\"uniq_id\");\r\n* var form_html = form.addInput(\"ERR_ELEMENT_DOES_NOT_EXIST\")\r\n* .addInput(\"NOT_CREATED_SESSION_MANAGER\")\r\n* .addInput(\"EDOCUMENT_SIGN\")\r\n* .addText(\"NO_RIGHTS_FOR_SIGN_EDOC_DUE_EDIT\")\r\n* .addTextarea(\"REPORT_ASKABLE_PARAMS\")\r\n* .addInput(\"NOT_CREATED_SESSION_MANAGER\")\r\n* .render();\r\n* WebAccess.current.sideBar.tabs.FldTree.setHtml(form_html);\r\n\r\n* @example\r\n* var CP = WA.components;\r\n* var form = new CP.forms.FormBuilder(\"filter_save_modal\");\r\n* form.addPick(\"FILTER_NAME\", {\"key\": \"value\", \"key2\": \"value2\"}, null, null, true, {\"isRequired\": true});\r\n\r\n* var dialog = new CP.dialogs.BaseDialog();\r\n* dialog.title = L(\"SAVE_NEW_FILTER\");\r\n* dialog.html = form.render();\r\n* dialog.isShowCancelButton = true;\r\n* dialog.ok = function() {\r\n* if (form.isValid() === false) return false;\r\n* var filterName = form.getValue(\"FILTER_NAME\");\r\n* var displayValue = form.getDisplayValue(\"FILTER_NAME\");\r\n* if (filterName === \"\") {\r\n* CallService(\"/Service.asmx/CreateNewFilter\", {\"ReferenceCode\": WA.current.getReferenceCode() ,\"Name\": displayValue} , function(response) {\r\n* });\r\n* }};\r\n* dialog.show();\r\n*\r\n* @since 5.0.0.4000\r\n* @class WebAccess.components.forms.FormBuilder\r\n* @mixes WebAccess.mixins.pluginMixin\r\n* @extends BaseObject\r\n* @param {string} id Уникальный идентификатор формы. Параметр является обязательным\r\n* @property {string} displayErrors [\"tip\",\"inline\", \"none\"] - режим отображения ошибок, возникающих при проверке корректности заполнения формы\r\n* @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED - заданы не все обязатаельные параметры.\r\n*/\r\n\r\n/**\r\n * Правила корректности заполнения формы.\r\n * @typedef {Object} WebAccess.components.forms.FormBuilder.validatorRules\r\n * @property {boolean} [isRequired] Признак обязательного поля\r\n * @property {boolean} [isDate] Признак того, что поле имеет тип «Дата»: 01/01/2000, 01.01.2000, а не 01/01.2000 или «фдлврф»\r\n * @property {boolean} [isDigit] Признак того, что поле имеет тип «Число»\r\n * @property {boolean} [min] Допустимое минимальное числовое значение\r\n * @property {boolean} [max] Допустимое максимальное числовое значение\r\n * @property {boolean} [isEmail] Значение поля – адрес электронной почты\r\n * @since 5.0.0.4000\r\n *\r\n * @example\r\n * form.addCustomField(\"TO_ARCHIVE_DATE\", toArchiveDateHtml, { \"isRequired\": true, \"isDate\": true });\r\n */\r\n\r\n/**\r\n * Ссылка на объект\r\n * @typedef {Object} WebAccess.components.forms.FormBuilder.objectLink\r\n * @property {integer} id ИД объекта\r\n * @property {OBJECT_TYPE} type Тип объекта\r\n * @property {boolean} [referenceCode] Код справочника\r\n * @since 5.0.0.7100\r\n*/\r\n\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n(function (global) {\r\n var FormBuilder = BaseObject.extend([WA.mixins.pluginMixin], {\r\n className: \"FormBuilder\",\r\n id: \"\",\r\n items: {},\r\n invalidFields: [],\r\n displayErrors: \"tip\",\r\n heigth: 100,\r\n _html: '',\r\n _orientaion: ORIENTATION.HORIZONTAL,\r\n _request: [],\r\n _action: \"#\",\r\n _method: FORM_METHOD.POST,\r\n _enctype: ENCTYPE.MULTIPART,\r\n _constructors: [],\r\n isHtmlFormEnabled: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (id) {\r\n if (!id) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\", \"id\");\r\n this._super(id);\r\n this.id = id;\r\n\r\n //Это обязательно, не понятно почему, но оно не обнуляется само\r\n this.items = {};\r\n this.invalidFields = [];\r\n this._request = [];\r\n this._constructors = [];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Изменить ориентацию содержимого формы.\r\n * Поддерживается вертикальная и горизонтальная ориентация.\r\n * Метод используется до вызова одной из функций добавления поля, например addText или addReferenceSelect,\r\n * сразу после вызова конструктора либо после вызова метода render.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#setOrientation\r\n * @param {string} orientation Ориентация HTML-разметки. Возможные значения: \"vertical\" – поля располагаются под названием поля; \"horizontal\" – поле и его название располагаются в одной строке. Значение по умолчанию - \"horizontal\"\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n setOrientation: function (orientation) {\r\n var me = this;\r\n if (!isNaN(orientation)) {\r\n if (orientation === 0) me._orientaion = 'horizontal';\r\n else me._orientaion = 'vertical';\r\n } else {\r\n this._orientaion = orientation;\r\n }\r\n\r\n var jForm = $(\"#\" + this.id);\r\n if (jForm.length > 0) {\r\n jForm.find(\".field_container\").removeClass(me._orientaion).addClass(me._orientaion);\r\n jForm.find(\".rs_SelItems_cont\").removeAttr(\"style\"); //хак для RefSel\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Получить значение поля.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#getValue\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {boolean} [opt_byId] Признак, отключено ли внутреннее преобразование идентификатора. Если отключено, указанный идентификатор используется в неизменном виде\r\n * @return {string} Значение поля.\r\n */\r\n getValue: function (name, opt_byId) {\r\n if (!$(\"#\" + this.id).length) WA.raise('ERR_UNABLE_TO_GET_THE_VALUE_FORM_IS_MISSING');\r\n\r\n var byId = byId || false;\r\n name = name.toLowerCase();\r\n var type = \"\";\r\n var value = \"\";\r\n var jField = $(\"#\" + name);\r\n\r\n if (name in this.items) type = this.items[name].type;\r\n else type = \"undefinied\";\r\n\r\n switch (type) {\r\n case \"text\":\r\n jField = $(\"#\" + name + \"_label\");\r\n value = jField.html();\r\n break;\r\n case \"textFrame\":\r\n value = jField.html();\r\n break;\r\n case \"radio\":\r\n value = jField.find('input[name=\"' + name + '\"]:checked').val();\r\n break;\r\n case \"input\":\r\n case \"date\":\r\n value = jField.val();\r\n break;\r\n case \"select\":\r\n value = jField.val();\r\n break;\r\n case \"referenceSelect\":\r\n case \"multiSelect\":\r\n value = $(\"#hSelID_\" + name).val();\r\n break;\r\n case \"custom\":\r\n if (!byId) value = $(\"#hSelID_\" + name).val();\r\n else value = jField.val();\r\n break;\r\n case \"pick\":\r\n var pickInstance = $(\"#\" + name + \"inp\").data('DropDownListInstance');\r\n value = pickInstance.getValue();\r\n if (value == \"-1\") value = \"\";\r\n break;\r\n case \"objectList\":\r\n return ListRequisite(name).GetLinks();\r\n break;\r\n case \"undefinied\":\r\n value = \"\";\r\n break;\r\n case \"checkbox\":\r\n value = jField.is(':checked');\r\n break;\r\n default:\r\n value = jField.val();\r\n break;\r\n }\r\n return value;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает значение указанного поля.\r\n * Метод можно использовать, только когда поле уже отображаетсяна странице.\r\n * Например, если форма используется в модальном окне, то метод необходимо использовать только после события open модального окна:\r\n * dialog.bind('open', function() {\r\n * form.setValue(.....)\r\n * ...\r\n * })\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#setValue\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {string} value Значение поля\r\n * @param {string} displayValue Отображаемое значение поля\r\n * @param {boolean} [opt_byId] Отключить внутренние преобразования идентификатора, и использовать указанный.\r\n * @return {WebAccess.components.forms.FormBuilder} Объект типа FormBuilder.\r\n */\r\n setValue: function (name, value, displayValue, opt_byId) {\r\n var byId = byId || false;\r\n name = name.toLowerCase();\r\n var type = \"\";\r\n var jField = $(\"#\" + name);\r\n\r\n if (name in this.items) type = this.items[name].type;\r\n else type = \"undefinied\";\r\n\r\n switch (type) {\r\n case 'radio':\r\n var jRadios = jField.find('input[name=\"' + name + '\"]');\r\n jRadios.filter('[value=\"' + value + '\"]').prop('checked', true);\r\n break;\r\n case \"referenceSelect\":\r\n case \"multiSelect\":\r\n WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite.setControlValue(jField, value, displayValue);\r\n break;\r\n case \"pick\":\r\n setTimeout(function () {\r\n var pickInstance = $(\"#\" + name + \"inp\").data('DropDownListInstance');\r\n pickInstance.setValue(value, displayValue);\r\n }, 10);\r\n break;\r\n case \"undefinied\":\r\n break;\r\n case \"text\":\r\n jField = $(\"#\" + name + \"_label\");\r\n jField.html(L(value));\r\n break;\r\n case \"textFrame\":\r\n jField.html(value);\r\n break;\r\n case \"objectList\":\r\n var list = ListRequisite(name);\r\n var links = [];\r\n\r\n for (var i in value) {\r\n links.push({\r\n 'ID': value[i].id,\r\n 'Kind': objectTypeToString(value[i].type),\r\n 'referenceName': value[i].CompCode\r\n });\r\n }\r\n list.Values = links;\r\n list.UpdateList();\r\n break;\r\n case 'date':\r\n if (typeof value === \"object\") {\r\n value = formatDate(value);\r\n }\r\n jField.val(value);\r\n break;\r\n case 'checkbox':\r\n if (!!value) jField.attr('checked', 'checked');\r\n else jField.removeAttr('checked');\r\n break;\r\n default:\r\n jField.val(value);\r\n break;\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выкидывает исключение при попытке добавить одно и то-же поле\r\n * @private\r\n * @function WebAccess.components.forms.FormBuilder#_preventDoubles\r\n */\r\n _preventDoubles: function (id) {\r\n if (this.items[id]) WA.raise(\"ERR_FIELD_WITH_THE_SAME_NAME_ALREADY_EXIST\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить отображаемое значение поля.\r\n *\r\n * @param {string} name Имя поля\r\n * @function WebAccess.components.forms.FormBuilder#getDisplayValue\r\n * @return {string} Отображаемое значение поля.\r\n */\r\n getDisplayValue: function (name) {\r\n var type = \"\";\r\n name = name.toLowerCase();\r\n var value = \"\";\r\n var jField = $(\"#\" + name);\r\n\r\n if (name in this.items) type = this.items[name].type;\r\n else type = \"undefinied\";\r\n switch (type) {\r\n case \"text\":\r\n jField = $(\"#\" + name + \"_label\");\r\n jField.html(L(value));\r\n break;\r\n case \"textFrame\":\r\n value = jField.html();\r\n break;\r\n case \"pick\":\r\n var pickInstance = $(\"#\" + name + \"inp\").data('DropDownListInstance');\r\n value = pickInstance.getDisplayValue();\r\n break;\r\n case \"multiSelect\":\r\n case \"referenceSelect\":\r\n var values = [];\r\n $('#' + name + '_container').find('.rs_SelItems').children(\"span\").each(function () {\r\n values.push($(this).attr(\"data-text\"));\r\n });\r\n value = values.join(';');\r\n break;\r\n case \"undefinied\":\r\n value = \"\";\r\n break;\r\n case \"objectList\":\r\n WA.raise('ERR_UNSUPPORTED_METHOD');\r\n break;\r\n default:\r\n value = jField.val();\r\n break;\r\n }\r\n return value;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить высоту формы.\r\n * Устаревший метод, оставлен для совместимости с предыдущими версиями. Не рекомендуется его использовать.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#getHeight\r\n * @return {integer} Высота формы.\r\n * @since 5.0.0.4000\r\n * @deprecated\r\n */\r\n getHeight: function () {\r\n return this.heigth;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Получить высоту формы.\r\n *\r\n * @deprecated\r\n * @alias WebAccess.components.forms.FormBuilder#getHeight\r\n * @function WebAccess.components.forms.FormBuilder#getHeigth\r\n * @ignore\r\n */\r\n getHeigth: function () { return this.getHeight.apply(this, arguments); },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаление поля с формы\r\n * @function WebAccess.components.forms.FormBuilder#_removeField\r\n * @private\r\n * @param {string} name идентификатор поля\r\n * @return {WebAccess.components.forms.FormBuilder}\r\n */\r\n _removeField: function (id) {\r\n if (!id) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\", \"name\");\r\n this._preventDoubles(id);\r\n $(\"#\" + name.toLowerCase() + \"_container\").remove();\r\n this.items[id] = { 'id': id }; //В этой строке заключается порядок, убрать её, значит нарушить его.\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить текст на форму.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addText\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addText: function (name) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n var constructor = {\r\n template: 'formBuilder/text.compile.html',\r\n params: {\r\n 'id': id,\r\n 'text': L(name)\r\n },\r\n\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, 'text', html, null);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Для вставки звездочки в обязательные поля\r\n * @private\r\n */\r\n _asterisk: function (label, rules) {\r\n if (rules && rules['isRequired'] && label !== '') {\r\n return '*';\r\n }\r\n return '';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле типа «Текст».\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addInput\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {number} [opt_maxlength] Допустимое количество символов в поле\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @param {string} [opt_accept] Строка для атрибута \"accept\", например \".xls,.xlsx\"\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addInput: function (name, opt_maxlength, opt_validateRules, opt_type, opt_defaultValue, opt_accept) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n opt_type = opt_type || 'input';\r\n opt_maxlength = opt_maxlength || '';\r\n opt_defaultValue = opt_defaultValue || '';\r\n opt_accept = opt_accept || '';\r\n\r\n var label = L(name);\r\n var constructor = {\r\n template: 'formBuilder/input.compile.html',\r\n params: {\r\n 'id': id,\r\n 'orientation': me._orientaion,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'type': (opt_type == 'input') ? 'text' : opt_type,\r\n 'max': opt_maxlength,\r\n 'value': opt_defaultValue,\r\n 'accept': opt_accept\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, opt_type, html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле типа «File».\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addFileField\r\n * @param {string} name Строка локализации равная идентификатору поля\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @param {string} [opt_accept] Строка для атрибута \"accept\", например \".xls,.xlsx\", а лучше вместе с MIME-type:\r\n * \".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel\"\r\n * (см. https://w3c.github.io/html/sec-forms.html#element-attrdef-input-accept)\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addFileField: function (name, opt_validateRules, opt_accept) {\r\n return this.addInput(name, null, opt_validateRules, 'file', '', opt_accept);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить скрытое поле.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addHiddenField\r\n * @param {string} name Строка локализации равная идентификатору поля\r\n * @param {string} value Значение поля\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addHiddenField: function (name, value) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n var constructor = {\r\n template: 'formBuilder/hidden.compile.html',\r\n params: {\r\n 'id': id,\r\n 'value': value\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, \"datehidden\", html, null);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле для выбора даты.\r\n *\r\n * @method WebAccess.components.forms.FormBuilder#addDate\r\n * @param {string} name Строка локализации равная идентификатору поля\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addDate: function (name, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n var constructor = {\r\n template: 'formBuilder/date.compile.html',\r\n params: {\r\n 'id': id\r\n },\r\n afterRender: function (html) {\r\n html = me._wrapControl(id, html, opt_validateRules);\r\n me._addItem(name, id, false, \"date\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить многострочное поле.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addTextarea\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {string} opt_defaultvalue Значение по умолчанию\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addTextArea: function (name, opt_defaultvalue, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n var label = L(name);\r\n var constructor = {\r\n template: 'formBuilder/textArea.compile.html',\r\n params: {\r\n 'id': id,\r\n 'orientation': me._orientaion,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'value': opt_defaultvalue\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, \"textArea\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Добавить многострочное поле фиксированной высоты.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addTextFrame\r\n * @param {string} name Строка локализации равная идентификатору поля\r\n * @param {string} defaultvalue Значение по умолчанию\r\n * @param {integer} [opt_maxHeigth] Высота, в рамках которой ограничивается поле\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила коррктности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Объект класса FormBuilder.\r\n * @since 5.1.0.1523\r\n */\r\n addTextFrame: function (name, opt_defaultvalue, opt_maxHeigth, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n opt_maxHeigth = opt_maxHeigth || '150';\r\n opt_maxHeigth = opt_maxHeigth + 'px';\r\n\r\n var label = L(name);\r\n var constructor = {\r\n template: 'formBuilder/textFrame.compile.html',\r\n params: {\r\n 'id': id,\r\n 'maxHeigth': opt_maxHeigth,\r\n 'orientation': me._orientaion,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'value': opt_defaultvalue\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, \"textFrame\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Добавить многострочное поле.\r\n * @deprecated\r\n * @alias WebAccess.components.forms.FormBuilder#addTextArea\r\n * @function WebAccess.components.forms.FormBuilder#addTextarea\r\n * @ignore\r\n */\r\n addTextarea: function () {\r\n return this.addTextArea.apply(this, arguments);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле выбора из списка.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addSelect\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {dictionary} options Список элементов выбора\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addSelect: function (name, options, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n\r\n\r\n var mustache_options = [];\r\n for (var prop in options) {\r\n if (options.hasOwnProperty(prop)) {\r\n mustache_options.push({\r\n 'key': prop,\r\n 'value': L(options[prop])\r\n });\r\n }\r\n }\r\n\r\n var label = L(name);\r\n var constructor = {\r\n template: 'formBuilder/select.compile.html',\r\n params: {\r\n 'id': id,\r\n 'orientation': me._orientaion,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'options': mustache_options\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, \"select\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить группу переключателей.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addRadioButtons\r\n * @param {string} name Строка локализации, равная идентификатору этого поля\r\n * @param {dictionary} options Список элементов выбора\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n * @since 5.1.0.1505\r\n */\r\n addRadioButtons: function (name, options, opt_validateRules, opt_defaultvalue) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n opt_defaultvalue = opt_defaultvalue || null;\r\n\r\n var mustache_options = [];\r\n for (var prop in options) {\r\n if (options.hasOwnProperty(prop)) {\r\n mustache_options.push({\r\n 'key': prop,\r\n 'value': L(options[prop]),\r\n 'checked': opt_defaultvalue == prop ? 'checked=\"checked\"' : ''\r\n });\r\n }\r\n }\r\n\r\n var label = L(name);\r\n var constructor = {\r\n template: 'formBuilder/radio.compile.html',\r\n params: {\r\n 'id': id,\r\n 'orientation': me._orientaion,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'options': mustache_options\r\n },\r\n afterRender: function (html) {\r\n me._addItem(name, id, false, \"radio\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Добавить поле типа «Справочник».\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addReferenceSelect\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {string} referenceCode Код справочника\r\n * @param {string} [opt_toolTip] Текст всплывающей подсказки для кнопки выбора из справочника\r\n * @param {string} [opt_searchReqName] Отображаемый реквизит. По умолчанию реквизит «Наименование»\r\n * @param {string} [opt_filter] Выражение фильтрации. Для выбора будут доступны только отфильтрованные записи указанного справочника\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addReferenceSelect: function (name, referenceCode, opt_toolTip, opt_searchReqName, opt_filter, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n this._removeField(id);\r\n\r\n var other = {\r\n 'referenceCode': referenceCode,\r\n 'toolTip': opt_toolTip,\r\n 'searchReqName': opt_searchReqName,\r\n 'filter': opt_filter\r\n };\r\n\r\n me._addItem(name, id, true, \"referenceSelect\", '', opt_validateRules, other);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле типа «Список объектов».\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addObjectList\r\n * @param {string} name Строка локализации равная идентификатору этого поля.\r\n * @param {string} type Возможные значения: EDOCUMENT, JOB, FOLDER, TASK, REFERENCE_RECORD, ANY\r\n * @param {WebAccess.components.forms.FormBuilder.objectLink} opt_liks Ссылки объектов по умолчанию. Подробнее см. WebAccess.components.forms.FormBuilder.objectLink\r\n * @param {boolean} opt_isList Значение True, если можно вставить несколько объектов в поле, иначе False\r\n * @param {string} referenceCode Код справочника.\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n * @since 5.0.0.7100\r\n *\r\n * @example\r\n * var form = new WA.CMP.forms.FormBuilder(\"1\")\r\n * form.addObjectList(\"YEsdscSd\", OBJECT_TYPE.REFERENCE_RECORD,[{\"id\": \"103619\", \"type\": OBJECT_TYPE.REFERENCE_RECORD, \"referenceCode\": \"ПРС\"}], true,'ПРС')\r\n *\r\n * var dialog = new WA.CMP.dialogs.BaseDialog(\"as\")\r\n * dialog.setHtml(form.render())\r\n * dialog.width = 700\r\n * dialog.show()\r\n */\r\n addObjectList: function (name, type, opt_links, opt_isList, opt_referenceCode, opt_validateRules) {\r\n var me = this;\r\n\r\n var id = name.toLowerCase();\r\n this._removeField(id);\r\n\r\n var other = {\r\n \"object_type\": type,\r\n \"values\": opt_links,\r\n \"isList\": opt_isList,\r\n \"referenceCode\": opt_referenceCode\r\n };\r\n\r\n me._addItem(name, id, true, \"objectList\", '', opt_validateRules, other);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле множественного выбора из справочника.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addMultiSelect\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {string} referenceNames Коды справочников, разделенные \";\"\r\n * @param {string} [opt_toolTip] Текст всплывающей подсказки\r\n * @param {string} [opt_searchReqName] Отображаемый реквизит\r\n * @param {string} [opt_filter] Выражение фильрации. В поле будут доступны только отфильтрованные записи выбранного справочника\r\n * @param {boolean} [opt_isMultiSelect] Признак множественного выбора\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n * @since 5.0.0.4106\r\n */\r\n addMultiSelect: function (name, referenceNames, opt_toolTip, opt_searchReqName, opt_filter, opt_isMultiSelect, opt_validateRules) {\r\n var me = this;\r\n\r\n var id = name.toLowerCase();\r\n this._removeField(id);\r\n\r\n var other = {\r\n 'referenceNames': referenceNames,\r\n 'toolTip': opt_toolTip,\r\n 'searchReqName': opt_searchReqName,\r\n 'filter': opt_filter,\r\n 'isMultiSelect': opt_isMultiSelect\r\n };\r\n\r\n me._addItem(name, id, true, \"multiSelect\", '', opt_validateRules, other);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле типа «Признак».\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addPick\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {dict} values Ассоциативный массив, содержащий пары: ИД пункта выпадающего списка – отображаемое значение пункта\r\n * @param {dict} [opt_displayValues] Отображаемые значения для выпадающего списка\r\n * @param {array} [opt_disabledValues] Пункты недоступные для выбора\r\n * @param {boolean} [opt_editable] Если значение true, то поле ввода становится доступным для изменения. В случае, если значение было введено вручную, метод getValue вернет пустую строку. Такое значение необходимо получать методом getDisplayValue\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Текущий конструктор форм.\r\n */\r\n addPick: function (name, values, opt_displayValues, opt_disabledValues, opt_editable, opt_validateRules) {\r\n var me = this;\r\n\r\n var id = name.toLowerCase();\r\n this._removeField(id);\r\n var other = {\r\n 'values': values,\r\n 'displayValues': opt_disabledValues,\r\n 'disabledValues': opt_disabledValues,\r\n 'editable': opt_editable\r\n };\r\n\r\n me._addItem(name, id, true, \"pick\", '', opt_validateRules, other);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить поле информацию о поле во внутренний объект\r\n * @since 5.0.0.7100\r\n * @private\r\n */\r\n _addItem: function (name, id, fromServerSide, type, html, validateRules, other) {\r\n this.items[id] = {\r\n 'id': id,\r\n 'name': name,\r\n 'fromServerSide': fromServerSide,\r\n \"type\": type,\r\n 'validateRules': validateRules,\r\n 'data': html\r\n };\r\n\r\n if (other) {\r\n $.extend(this.items[id], other);\r\n }\r\n },\r\n\r\n /**\r\n * Добавить поле с произвольным содержимым.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addCustomField\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {string} html HTML-разметка. Должна содержать указанный параметр name\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n addCustomField: function (name, html, opt_validateRules, opt_type) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n me._removeField(id);\r\n var type = (!!opt_type) ? opt_type : \"custom\";\r\n var item = me._wrapControl(id, html, opt_validateRules);\r\n\r\n me._addItem(name, id, false, type, item, opt_validateRules);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обернуть контрол в контейнер с нужными отступами\r\n * Следуюя общему принципу эта функция тоже должна быть асинхронной\r\n * и использовать шаблоны, но в силу сложности дальнейших доработок и\r\n * ограниченности времени оставется в текущем виде\r\n * @todo перенести на шаблоны\r\n * @private\r\n * @since 5.0.0.7001\r\n */\r\n _wrapControl: function (id, control_html, opt_validateRules) {\r\n var label = L(id.toUpperCase());\r\n var html = \"
    \";\r\n html += format(\"\", {\r\n 'id': id,\r\n 'label': (label === '' ? '' : label + ':'),\r\n 'asterisk': this._asterisk(label, opt_validateRules)\r\n });\r\n\r\n html += '
    ' + control_html + '
    ';\r\n html += \"
    \";\r\n return html;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить переключатель.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addCheckbox\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @param {bool} opt_isChecked Проверяет, установлен переключатель или нет\r\n * @param {WebAccess.components.forms.FormBuilder.validatorRules} [opt_validateRules] Правила корректности заполнения формы\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n * @since 5.0.0.4301\r\n */\r\n addCheckbox: function (name, opt_isChecked, opt_validateRules) {\r\n var me = this;\r\n var id = name.toLowerCase();\r\n this._removeField(id);\r\n\r\n var label = L(name);\r\n var constructor = {\r\n 'template': 'formBuilder/checkBox.compile.html',\r\n 'params': {\r\n 'id': id,\r\n 'label': label,\r\n 'asterisk': me._asterisk(label, opt_validateRules),\r\n 'isChecked': opt_isChecked === true ? 'checked=\"checked\"' : '',\r\n 'orientation': this._orientaion\r\n },\r\n 'afterRender': function (html) {\r\n me._addItem(name, id, false, \"checkbox\", html, opt_validateRules);\r\n }\r\n };\r\n\r\n me._constructors.push(constructor);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Попытка получить значение контрола всеми возможными способами.\r\n * @private\r\n * @function WebAccess.components.forms.FormBuilder#_tryGetValue\r\n */\r\n _tryGetValue: function (item) {\r\n var value = this.getValue(item[\"id\"]) || this.getDisplayValue(item[\"id\"]);\r\n if (typeof value == 'undefined') value = this.getValue(item[\"id\"], true);\r\n if (typeof value == 'undefined') value = '';\r\n if (item.type === 'objectList') {\r\n if (value.links && value.links.length > 0)\r\n return 'undefined';\r\n else\r\n return '';\r\n }\r\n return value;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить правила корректности ввода данных.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#addValidationRule\r\n * @param {string} name Название правила\r\n * @param {function} handler Функция проверки правила\r\n * @param {string} opt_error_message Сообщение об ошибке, возникающей при невыполнении правила\r\n *\r\n * @example\r\n * // К правилам корректности ввода данных добавляется новое «MoreThanTen».\r\n * // Правило означает, что форма заполнена правильно, если значение поля больше 10.\r\n * var form = new WA.CMP.forms.FormBuilder('buldy');\r\n * form.addValidationRule('moreThanTen', function(value, display) {\r\n * console.log(arguments);\r\n * if (value < 10) return false;\r\n * return true;\r\n * }, L('ERROR'));\r\n *\r\n * var dialog = new WA.CMP.dialogs.BaseDialog();\r\n *\r\n * //Применяем правило к полю «YES».\r\n * form.addInput(\"YES\", 100, {'isRequired': true, 'moreThanTen': true});\r\n * dialog.setHtml(form.render());\r\n * dialog.show();\r\n * dialog.ok = function() {\r\n * if (form.isValid() !== true) return false;\r\n *\r\n * }\r\n */\r\n addValidationRule: function (name, handler, opt_error_message) {\r\n this._validators[name] = {};\r\n this._validators[name].handler = handler;\r\n this._validators[name].error = opt_error_message;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить корректность значений.\r\n * @function WebAccess.components.forms.FormBuilder#isValid\r\n * @return {boolean} True, если значения полей формы корректны, иначе False.\r\n */\r\n isValid: function () {\r\n var me = this;\r\n this.invalidFields = [];\r\n\r\n $.each(me.items, function (key, item) {\r\n if (item[\"validateRules\"]) {\r\n var rules = item[\"validateRules\"];\r\n\r\n // Забываем все предыдущие ошибки полей\r\n me._markAsValid(item);\r\n item.error = \"\";\r\n $('#' + item[\"id\"] + '_mt_error').html(\"\");\r\n\r\n // Проверка на обязательность, она особая и запускается отдельно\r\n if (rules.isRequired) {\r\n if (me._validators['isRequired']['handler'](me._tryGetValue(item)) === false) {\r\n item.error = me._validators['isRequired']['error'] || L('ERROR');\r\n me._markAsInvalid(item);\r\n }\r\n }\r\n\r\n /**\r\n * Остальные правила\r\n */\r\n for (var ruleName in me._validators) {\r\n if (rules[ruleName] && !item.error && me._tryGetValue(item) !== '') {\r\n if (me._validators[ruleName]['handler'](me._tryGetValue(item), me.getDisplayValue(item.id), rules[ruleName]) === false) {\r\n item.error = me._validators[ruleName]['error'] || L('ERROR');\r\n me._markAsInvalid(item);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n var prevColor;\r\n //Изменение внешнего вида невалидных полей\r\n $.each(this.invalidFields, function (index, item) {\r\n var jBorder = me._getFieldBorder(item).addClass(\"Req_Error\");\r\n if (!prevColor) prevColor = jBorder.css('backgroundColor');\r\n var highlight = \"#F6DADA\";\r\n\r\n jBorder.animate({ backgroundColor: highlight }, 300, function () {\r\n jBorder.animate({ backgroundColor: prevColor }, 300);\r\n });\r\n\r\n if (me.displayErrors == \"inline\") {\r\n var errorsHtml = format(\" ({0})\", item.error);\r\n $(format(\"#{0}_mt_error\", item[\"id\"])).html(errorsHtml);\r\n }\r\n\r\n if (me.displayErrors == \"tip\") {\r\n var el = jBorder;\r\n if (item.type == 'referenceSelect') el = el.siblings('.rs_SelItems_cont');\r\n el.qtip({\r\n style: { classes: \"ui-tooltip-light ui-tooltip-shadow ui-tooltip-rounded\" },\r\n content: { text: item.error },\r\n events: {\r\n render: function (event, api) {\r\n setTimeout(function () { el.qtip(\"destroy\"); }, 2000);\r\n }\r\n }\r\n });\r\n }\r\n\r\n });\r\n\r\n if (this.invalidFields.length > 0) return false;\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Чтобы отметить поле невалидным визуально, нужно знать как с ним работать\r\n * тут перечилены селекторы, которые отвечают за границы элементов ввода\r\n * @function WebAccess.components.forms.FormBuilder#_getFieldBorder\r\n * @private\r\n * @todo: некрасиво, отрефакторить\r\n * @param {object} item\r\n */\r\n _getFieldBorder: function (item) {\r\n var element = null;\r\n var selector = $(\"#\" + item[\"id\"]);\r\n switch (item[\"type\"]) {\r\n case \"custom\":\r\n element = selector.parents(\"span\").find(\".fakeInput\");\r\n break;\r\n case \"referenceSelect\":\r\n case \"multiSelect\":\r\n element = selector.parents(\"span\").find(\".fakeInput\");\r\n break;\r\n case \"objectList\":\r\n element = selector.find(\".ListRequisiteBorder\");\r\n break;\r\n case \"pick\":\r\n element = $(\"#\" + item[\"id\"] + \"inp\");\r\n break;\r\n default:\r\n element = selector;\r\n break;\r\n }\r\n return element;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отметка элемента невалидным, то что его представление\r\n * будет крассным обрабатывается уже не здесь\r\n * @private\r\n * @function WebAccess.components.forms.FormBuilder#_markAsInvalid\r\n * @param {object} item\r\n */\r\n _markAsInvalid: function (item) {\r\n var id = item[\"id\"];\r\n this.invalidFields.push(item);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отметка элемента валидным\r\n * @function WebAccess.components.forms.FormBuilder#_markAsValid\r\n * @private\r\n * @param {object} item\r\n */\r\n _markAsValid: function (item) {\r\n var id = item[\"id\"];\r\n this._getFieldBorder(item).removeClass(\"Req_Error\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Заполенение данных для отображения.\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _fillItem: function (id, result, opt_validateRules) {\r\n var me = this;\r\n var html = result.html + '';\r\n me.items[id].data = me._wrapControl(id, html, opt_validateRules);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Установить адрес для отправки формы.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#setAction\r\n * @param {string} url Адрес для отправки формы\r\n * @return {WebAccess.components.forms.FormBuilder} Текущий конструктор форм.\r\n * @since 5.0.0.7100\r\n */\r\n setAction: function (url) {\r\n var me = this;\r\n me.isHtmlFormEnabled = true;\r\n me._action = url;\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Метод для отправки формы.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#setMethod\r\n * @param {FORM_METHOD} form_method Метод для отправки формы\r\n * @return {WebAccess.components.forms.FormBuilder} Текущий конструктор форм.\r\n * @since 5.0.0.7100\r\n */\r\n setMethod: function (form_method) {\r\n var me = this;\r\n me.isHtmlFormEnabled = true;\r\n me._method = form_method;\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Установить тип содержимого формы.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#setEnctype\r\n * @param {ENCTYPE} enctype Тип содержимого формы\r\n * @return {WebAccess.components.forms.FormBuilder} Текущий конструктор форм.\r\n * @since 5.0.0.7100\r\n */\r\n setEnctype: function (enctype) {\r\n var me = this;\r\n me.isHtmlFormEnabled = true;\r\n me._enctype = enctype;\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Отправить форму.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#submit\r\n * @return {WebAccess.components.forms.FormBuilder} Текущий конструктор форм.\r\n * @since 5.0.0.7100\r\n */\r\n submit: function () {\r\n $(\"#\" + this.id + \" form\").submit();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Гененерировать форму.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#render\r\n * @return {string} Сгенерированная HTML-разметка.\r\n */\r\n render: function () {\r\n var me = this;\r\n me._render(true);\r\n return me._html;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Генерировать форму с помощью асинхронного вызова.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#renderAsync\r\n * @return {Deferred} Специальный deferred-объект.\r\n * @since 5.0.0.7100\r\n */\r\n renderAsync: function () {\r\n return this._render(false);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @private\r\n * @function WebAccess.components.forms.FormBuilder#_render\r\n * @return {Deferred} jquery deferred объект\r\n * @since 5.0.0.7100\r\n */\r\n _render: function (sync) {\r\n var me = this;\r\n var jMasterDeferred = $.Deferred();\r\n me.clean();\r\n\r\n var deferreds = [];\r\n for (var i = 0; i < me._constructors.length; i++) {\r\n var c = me._constructors[i];\r\n deferreds.push(WA.templates.render(c.template, c.params, false, sync).done(c.afterRender));\r\n }\r\n\r\n //Когда все поля готовы, делаем запрос\r\n $.when.apply(me, deferreds).then(function () {\r\n\r\n //TODO Шамов А.: Я думаю стоит переделать логику на на формирование запросов, засовывание в кэш, и рендеринг из кэша.\r\n // На мой взгляд это будет более понятно и не будет дублирования функции _fillItem.\r\n // Сейчас странно что _preRender только в этой части условия вызывается, а не в общей.\r\n\r\n me._preRender();\r\n var launchPostRender = function () {\r\n me._postRender(sync).done(function () {\r\n jMasterDeferred.resolve.apply(this, arguments);\r\n }).error(function () {\r\n jMasterDeferred.reject.apply(this, arguments);\r\n });\r\n };\r\n\r\n if (me._request.length) {\r\n var method = (sync) ? 'buildSync' : 'build';\r\n WA.SRV.requisite[method](me._request).done(function (result) {\r\n me._parseServiceResult(result);\r\n launchPostRender();\r\n });\r\n } else {\r\n launchPostRender();\r\n }\r\n });\r\n\r\n return jMasterDeferred;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Разбор ответа сервиса\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _parseServiceResult: function (result) {\r\n var me = this;\r\n for (var id in me._request) {\r\n var request = me._request[id];\r\n var name = request.id;\r\n if (typeof request == 'function') continue;\r\n WA.cache.setObject('field.' + getHash(JSON.stringify(request)), result[name]);\r\n me._fillItem(name, result[name], request.validateRules);\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Формирование запроса\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _preRender: function () {\r\n var me = this;\r\n me._request = [];\r\n\r\n /**\r\n * Если не можем взять реквизит из кеша по хешу,\r\n * то добавляем его в запрос\r\n */\r\n for (var i in me.items) {\r\n var request = this.items[i];\r\n if (request[\"fromServerSide\"]) {\r\n var name = request.id;\r\n var cached = WA.cache.getObject('field.' + getHash(JSON.stringify(request)));\r\n if (!cached) {\r\n me._request.push(this.items[i]);\r\n } else {\r\n me._fillItem(name, cached, request.validateRules);\r\n }\r\n }\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Формирование разметки\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _postRender: function (sync) {\r\n var me = this;\r\n\r\n var content = '';\r\n for (var id in this.items) {\r\n content += this.items[id][\"data\"];\r\n }\r\n\r\n var t = WA.templates.render('formBuilder/formLayout.compile.html', {\r\n 'id': me.id,\r\n 'action': me._action,\r\n 'method': me._method,\r\n 'enctype': me._enctype,\r\n 'orientation': me._orientaion,\r\n 'isHorizontal': me._orientaion == 'horizontal',\r\n 'content': content,\r\n 'isHtmlFormEnabled': me.isHtmlFormEnabled\r\n }, false, sync).done(function (html) {\r\n me._html = html;\r\n });\r\n\r\n return t;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Очистить форму.\r\n *\r\n * @function WebAccess.components.forms.FormBuilder#clean\r\n * @return {WebAccess.components.forms.FormBuilder} Oбъект класса FormBuilder.\r\n */\r\n clean: function () {\r\n $(\"#\" + this.id).remove();\r\n this._html = '';\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает неактивным контрол формы.\r\n * @private\r\n * @function WebAccess.components.forms.FormBuilder#disable\r\n * @param {string} name Строка локализации равная идентификатору этого поля\r\n * @return {WebAccess.components.forms.FormBuilder} Объект типа FormBuilder.\r\n * @since 5.3.0.1002\r\n */\r\n disable: function (name) {\r\n name = name.toLowerCase();\r\n var jField = $(\"#\" + name);\r\n\r\n // TODO доделать для остальных.\r\n\r\n var type = \"\";\r\n if (name in this.items) type = this.items[name].type;\r\n else type = \"undefinied\";\r\n\r\n switch (type) {\r\n case 'radio':\r\n //var jRadios = jField.find('input[name=\"' + name + '\"]');\r\n //jRadios.filter('[value=\"' + value + '\"]').prop('checked', true);\r\n break;\r\n case \"referenceSelect\":\r\n case \"multiSelect\":\r\n //WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite.setControlValue(jField, value, displayValue);\r\n break;\r\n case \"pick\":\r\n //TODO закэшировать в классе.\r\n var pickWrapper = new WA.CMP.wrappers.form.requisites.Pick(name, name);\r\n pickWrapper.disable();\r\n break;\r\n case \"undefinied\":\r\n break;\r\n case \"text\":\r\n //jField = $(\"#\" + name + \"_label\");\r\n //jField.html(L(value));\r\n break;\r\n case \"textFrame\":\r\n //jField.html(value);\r\n break;\r\n case \"objectList\":\r\n //var list = ListRequisite(name);\r\n //var links = [];\r\n\r\n //for (var i in value) {\r\n // links.push({\r\n // 'ID': value[i].id,\r\n // 'Kind': objectTypeToString(value[i].type),\r\n // 'referenceName': value[i].CompCode\r\n // });\r\n //}\r\n //list.Values = links;\r\n //list.UpdateList();\r\n break;\r\n case 'date':\r\n //jField.val(value);\r\n break;\r\n case 'checkbox':\r\n //if (!!value) jField.attr('checked', 'checked');\r\n //else jField.removeAttr('checked');\r\n break;\r\n default:\r\n //jField.val(value);\r\n break;\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сериализация формы\r\n *\r\n * @since 5.0.0.7300\r\n * @ignore\r\n * @function WebAccess.components.forms.FormBuilder#serialize\r\n * @return {WebAccess.components.forms.FormBuilder}\r\n */\r\n serialize: function (type) {\r\n\r\n switch (type) {\r\n case SERIALIZATION.FULL:\r\n return this._fullSerialization();\r\n break;\r\n case SERIALIZATION.LITE:\r\n default:\r\n return this._defaultSerialization();\r\n break;\r\n }\r\n\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _defaultSerialization: function () {\r\n var form = {\r\n source: 'FormBuilder',\r\n requisites: {}\r\n };\r\n\r\n var name;\r\n for (name in this.items) {\r\n if ($.isPlainObject(this.items[name])) {\r\n try {\r\n if (this.items[name].type == 'text') continue;\r\n form.requisites[name] = [this.getValue(name), this.getDisplayValue(name)];\r\n } catch (e) { }\r\n }\r\n }\r\n return form;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n //TODO: Научить работать с FormDialog\r\n _fullSerialization: function () {\r\n var me = this;\r\n var result = {\r\n ID: me.id,\r\n Actions: null,\r\n Caption: null,\r\n FType: 0,\r\n FormJS: null\r\n };\r\n var formData = {\r\n source: 'FormBuilder',\r\n obj: null,\r\n isNew: false,\r\n isreadonly: false,\r\n tab: null,\r\n view: null\r\n };\r\n\r\n result.FormData = $.toJSON(formdata);\r\n\r\n //TODO: дополнить\r\n var reqTypes = {\r\n 'input': 'string',\r\n 'referenceSelect': 'reference',\r\n 'multiSelect': 'reference',\r\n 'date': 'date',\r\n 'pick': 'pick'\r\n };\r\n\r\n var keys = _(this.items).pluck('name');\r\n var controls = _(this.items).pluck('id');\r\n var values = _(this.items).map(function (req) {\r\n return {\r\n value: me.getValue(req.name),\r\n displayValue: me.getDisplayValue(req.name),\r\n isVisible: true,\r\n isRequired: req.validateRules && req.validateRules.isRequired,\r\n type: reqTypes[req.type],\r\n controls: [req.id]\r\n }\r\n });\r\n\r\n data.req = _.object(keys, values);\r\n data.reqUD_inv = _(controls, keys);\r\n return result;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Десериализация формы\r\n * @since 5.0.0.7300\r\n * @ignore\r\n * @function WebAccess.components.forms.FormBuilder#deserialize\r\n * @return {WebAccess.components.forms.FormBuilder}\r\n */\r\n deserialize: function (form) {\r\n for (name in form.requisites) {\r\n if ($.isPlainObject(this.items[name])) {\r\n try {\r\n if (this.items[name].type == 'text') continue;\r\n if (!form.requisites[name].value) continue;\r\n this.setValue(name, form.requisites[name][0]);\r\n this.setDisplayValue(name.requisites, form[name][1]);\r\n } catch (e) { }\r\n }\r\n }\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.FormBuilder = FormBuilder;\r\n})(window.WebAccess.components.forms);","\"use strict\";\r\n(function (global) {\r\n global._validators = {\r\n\r\n 'isRequired': {\r\n 'handler': function (value, display) {\r\n if (!$.trim(value)) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_IS_REQUIRED\")\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n 'isDate': {\r\n 'handler': function (value, display) {\r\n if (!ParseDateTime(value)) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_MUST_CONTAIN_DATE\")\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n 'isDigit': {\r\n 'handler': function (value, display) {\r\n // Если введено число.\r\n if (value.search(/^[+-]?\\d+(((\\.\\d+)?)|((\\,\\d+)?))$/g) == -1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_MUST_CONTAIN_DIGITS_ONLY\")\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n 'isNumber': {\r\n 'handler': function (value, display) {\r\n if (isNaN(value)) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_MUST_CONTAIN_NUMBERS_ONLY\")\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n 'isEmail': {\r\n 'handler': function (value, display) {\r\n if (!validateEmail(value)) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_MUST_CONTAIN_EMAIL_ADRESS_ONLY\")\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n 'min': {\r\n 'handler': function (value, display, ruleValue) {\r\n if (value < ruleValue) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_REQUIRE_A_GIVEN_MINIMUM\")\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n 'max': {\r\n 'handler': function (value, display, ruleValue) {\r\n if (value > ruleValue) return false;\r\n return true;\r\n },\r\n 'error': L(\"ERR_THIS_FIELD_REQUIRE_A_GIVEN_MAXIMUM\")\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n var validateEmail = function (email) {\r\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email);\r\n };\r\n\r\n})(window.WebAccess.components.forms.FormBuilder.prototype);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Путь к шаблону реквизита с типом \"Ссылка на документ\".\r\n const TEMPLATE = '/components/documentRequisite.compile.html';\r\n\r\n /**\r\n * Реквизит таблицы типа «Ссылка на документ».\r\n *\r\n * @since 5.5.0.1000\r\n * @class WebAccess.components.forms.requisites.DocumentSelect\r\n * @extends BaseObject\r\n * @param {string|WebAccess.components.forms.requisites.DocumentSelect.settings} id Идентификатор элемента. Является обязательным параметром\r\n * @param {string} [opt_toolTip] Всплывающая подсказка\r\n * @param {string} [opt_searchReqName] Наименование отображаемого реквизита\r\n\r\n * @property {string} id Идентификатор элемента\r\n * @property {string} toolTip Всплывающая подсказка\r\n * @property {string} searchReqName Наименование отображаемого реквизита\r\n * @property {string} html HTML-разметка элемента\r\n *\r\n * @fires render вызывается после того, как HTML-разметка собрана и готова к использованию.\r\n * @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED - заданы не все обязательные параметры.\r\n * @example\r\n * var field = new WebAccess.components.forms.requisites.DocumentSelect(\"employe_select\", \"РАБ\").render();\r\n * WebAccess.current.sideBar.tabs.FldTree.setHtml(field);\r\n */\r\n\r\n /**\r\n * @typedef {object} WebAccess.components.forms.requisites.DocumentSelect.settings\r\n * @property {string} id Идентификатор формы справочника\r\n * @property {string} toolTip Всплывающая подсказка\r\n * @property {string} searchReqName Наименование отображаемого реквизита\r\n * @property {string} html HTML-разметка элемента\r\n */\r\n const DocumentSelect = BaseObject.extend({\r\n\r\n /**\r\n * Инициализация.\r\n *\r\n * @method WebAccess.components.forms.requisites.DocumentSelect#init\r\n * @param {string} id ИД реквизита.\r\n * @param {string} [toolTip=''] Текст подсказки.\r\n * @param {string} [searchReqName='ISBEDocName'] Имя реквизита, по которому осуществляется поиск.\r\n */\r\n init(id, toolTip = '', searchReqName = 'ISBEDocName') {\r\n this._super(id);\r\n this.className = 'DocumentSelect';\r\n\r\n if (!id) return;\r\n\r\n if ($.isPlainObject(id)) {\r\n $.extend(this, id);\r\n } else {\r\n this.id = id;\r\n this.toolTip = toolTip;\r\n this.searchReqName = searchReqName;\r\n }\r\n },\r\n\r\n /**\r\n * Генерирует HTML-разметку\r\n *\r\n * @method WebAccess.components.forms.requisites.DocumentSelect#render\r\n * @return {string} Сгенерированная HTML-разметка.\r\n */\r\n render() {\r\n let result = '';\r\n let requestMap = {\r\n 'ID': this.id.toLowerCase(),\r\n 'ToolTip': this.toolTip,\r\n 'SearchReqName': this.searchReqName,\r\n };\r\n\r\n CallServiceSync('/Requisite.asmx/DocumentSelect', requestMap, (response) => {\r\n if (response.Success) {\r\n result = response.Result.html;\r\n }\r\n else {\r\n ShowMessage(response.Result);\r\n }\r\n });\r\n\r\n this.fire('render');\r\n this.html = result;\r\n return result;\r\n },\r\n\r\n /**\r\n * Асинхронно генерирует HTML-разметку\r\n *\r\n * @method WebAccess.components.forms.requisites.DocumentSelect#renderAsync\r\n * @param {object} data Модель для отрисовки реквизита.\r\n * @return {string} Сгенерированная HTML-разметка.\r\n */\r\n renderAsync(data) {\r\n //TODO: Этот метод использует hogan шаблон, а для его работы необходимо много данных,\r\n //в том числе частично нужны данные с серверной стороны. В будущем необходимо эти\r\n //данные научится формировать либо получать. Сейчас пока этот метод будет работать\r\n //только если предоствить все данные явно. В будущем метод render(тот что выше) нужно\r\n //будет переделать на него, но с флагами синхронного вызова.\r\n if (!data) {\r\n WA.raise('NOT_IMPLEMENTED_EXCEPTION');\r\n }\r\n\r\n let result = $.Deferred();\r\n\r\n WA.templates.render(TEMPLATE, data).done((html) => {\r\n this.html = html;\r\n result.resolve(this.html);\r\n this.fire('render');\r\n });\r\n\r\n return result;\r\n }\r\n });\r\n\r\n global.DocumentSelect = DocumentSelect;\r\n})(window.WebAccess.components.forms.requisites);","\"use strict\";\r\n/** \r\n* Множественый выбор из справочника\r\n* \r\n* @since 5.0.0.4106 \r\n* @class WebAccess.components.forms.requisites.MultiSelect\r\n* @param {string|WebAccess.components.forms.requisites.MultiSelect.multiSelectSettings} id Идентификатор элемента. Является обязательным параметром\r\n* @param {string} referenceNames Коды справочников, разделенные символом \";\"\r\n* @param {string} [opt_toolTip] Высплывающая подсказка\r\n* @param {string} [opt_searchReqName] Название отображаемого реквизита\r\n* @param {string} [opt_filter] Выражение фильрации элементов выбранного справочника\r\n* @param {boolean} [opt_isMultiSelect] Признак выбора одной или нескольких записей из нескольких справочников в диалоговом окне. Если установлено значение False, то можно выбрать только одну запись. Иначе доступен выбор несколько записей из нескольких справочников\r\n\r\n* @property {string} id Идентификатор элемента. Является обязательным параметром\r\n* @property {string} referenceNames Коды справочников, разделенные символом \";\"\r\n* @property {string} toolTip Всплывающая подсказка\r\n* @property {string} searchReqName Название отображаемого реквизита\r\n* @property {string} filter Выражение фильтрации элементов выбранного справочника\r\n* @property {boolean} isMultiSelect Признак выбора одной или нескольких записей из нескольких справочников в диалоговом окне. Если установлено значение False, то можно выбрать только одну запись. Иначе доступен выбор несколько записей из нескольких справочников\r\n* @property {string} html HTML-разметка элемента\r\n*\r\n* @fires render вызывается после того, как HTML-разметка собрана и готова к использованию.\r\n* @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED - заданы не все обязатаельные параметры. \r\n*/\r\n\r\n/** \r\n* Параметры множественного выбора из справочника.\r\n* @typedef {object} WebAccess.components.forms.requisites.MultiSelect.multiSelectSettings\r\n* @property {string} id Идентификатор элемента. Является обязательным параметром\r\n* @property {string} referenceNames Коды справочников, разделенные символом \";\"\r\n* @property {string} toolTip Всплывающая подсказка\r\n* @property {string} searchReqName Название отображаемого реквизита\r\n* @property {string} filter Выражение фильтрации элементов выбранного справочника\r\n* @property {boolean} isMultiSelect Признак выбора одной или нескольких записей из нескольких справочников в диалоговом окне. Если установлено значение False, то можно выбрать только одну запись. Иначе доступен выбор несколько записей из нескольких справочников\r\n* @property {string} html HTML-разметка элемента\r\n*/\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n(function (global) {\r\n\r\n var MultiSelect = BaseObject.extend({\r\n init: function (id, referenceNames, opt_toolTip, opt_searchReqName, opt_filter, opt_isMultiSelect) {\r\n\r\n if (!id) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n\r\n this._super(id);\r\n if ($.isPlainObject(id)) {\r\n $.extend(this, id);\r\n } else {\r\n if (!referenceNames) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n this.id = id;\r\n this.referenceNames = !!referenceNames ? referenceNames : \"ПОД\";\r\n this.toolTip = !!opt_toolTip ? opt_toolTip : \"\";\r\n this.searchReqName = !!opt_searchReqName ? opt_searchReqName : \"Наименование\";\r\n this.filter = !!opt_filter ? opt_filter : \"\";\r\n this.isMultiSelect = !!opt_isMultiSelect ? opt_isMultiSelect : false;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"MultiSelect\",\r\n id: \"\",\r\n referenceNames: \"\",\r\n toolTip: \"\",\r\n searchReqName: \"Наименование\",\r\n filter: \"\",\r\n isMultiSelect: false,\r\n html: \"\",\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Собрать HTML-разметку с учетом указанных данных.\r\n * @function WebAccess.components.forms.requisites.MultiSelect#render\r\n * @return {string} Сгенерированная HTML-разметка\r\n */\r\n render: function () {\r\n var result = \"\";\r\n var requestMap = {\r\n \"ID\": this.id.toLowerCase(),\r\n \"RefNames\": this.referenceNames,\r\n \"ToolTip\": this.toolTip,\r\n \"SearchReqName\": this.searchReqName,\r\n \"Filter\": this.filter,\r\n \"IsMultiSelect\": this.isMultiSelect\r\n };\r\n\r\n CallServiceSync(\"/Requisite.asmx/MultiSelectControl\", requestMap, function (response) {\r\n if (response.Success) {\r\n result = response.Result.html;\r\n }\r\n else ShowMessage(response.Result);\r\n });\r\n\r\n this.fire(\"render\");\r\n this.html = result;\r\n return result;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n global.MultiSelect = MultiSelect;\r\n})(window.WebAccess.components.forms.requisites);","\"use strict\";\r\n(function (global) {\r\n var TEMPLATE = '/components/pick.compile.html';\r\n\r\n/** \r\n* Реквизит типа «Признак».\r\n* Предназначен для хранения значений, выбираемых из списка возможных значений. Может быть представлен в режиме для редактирования.\r\n* \r\n* @since 5.0.0.4000\r\n* @class WebAccess.components.forms.requisites.Pick\r\n* @param {string|WebAccess.components.forms.requisites.Pick.pickSettings} id Уникальный идентификатор элемента. Параметр является обязательным\r\n* @param {dict} values Словарь, состоящий из пар: ключ и значение элемента списка\r\n* @param {dict} [opt_displayValues] Список элементов, которые отображаются в списке возможных значений. Например, может быть использован для дополнения элементов списка иконками\r\n* @param {array} [opt_disabledValues] Список элементов, недоступных для выбора\r\n* @param {boolean} [opt_editable] Признак того, что список возможных значений можно редактировать\r\n\r\n* @property {string} id Уникальный идентификатор реквизита\r\n* @property {dict} values Словарь, состоящий из пар: ключ и значение элемента списка\r\n* @property {dict} opt_displayValues Список элементов, которые отображаются в списке возможных значений\r\n* @property {array} opt_disabledValues Список элементов, не доступных для выбора\r\n* @property {boolean} [opt_editable] Признак того, что список возможных значений в списке можно редактировать\r\n* @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED - заданы не все обязательные параметры.\r\n* @fires render вызывается после того, как HTML-разметка собрана и готова к использованию.\r\n* @example\r\n* var vlues = {\"1\": \"Пункт списка 1\", \"2\":\"Пункт списка 2\"};\r\n* var field = new WebAccess.components.forms.requisites.Pick(\"dropDown1\", values);\r\n* WebAccess.current.sideBar.tabs.FldTree.setHtml(field.render());\r\n*/\r\n\r\n/**\r\n* Настройки реквизита типа «Признак».\r\n* @typedef {object} WebAccess.components.forms.requisites.Pick.pickSettings\r\n* @property {string} id Уникальный идентификатор элемента\r\n* @property {dict} values Словарь, состоящий из ключей элементов списка и их значений\r\n* @property {dict} opt_displayValues Список элементов, которые отображаются в списке возможных значений \r\n* @property {array} opt_disabledValues Список элементов, недоступных для выбора\r\n* @property {boolean} [opt_editable] Признак того, что список возможных значений можно редактировать\r\n*/\r\n\r\n\r\n\r\n var Pick = BaseObject.extend({\r\n init: function (id, values, opt_displayValues, opt_disabledValues, opt_editable) {\r\n if (!id) return;\r\n\r\n this._super(id);\r\n if ($.isPlainObject(id)) {\r\n $.extend(this, id);\r\n } else { \r\n if (!values) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\");\r\n this.id = id; \r\n this.values = values;\r\n\r\n this.displayValues = !!opt_displayValues ? opt_displayValues : {};\r\n this.disabledValues = !!opt_disabledValues ? opt_disabledValues : [];\r\n this.editable = !!opt_editable; \r\n }\r\n\r\n if (this.editable === true) {\r\n this.values[\"-1\"] = \"\";\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"Pick\", \r\n id: \"\",\r\n values: {\"0\": L(\"EMPTY\")},\r\n displayValues: {},\r\n disabledValues: [],\r\n editable: false,\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Собрать HTML-разметку с учетом указанных параметров\r\n * @function WebAccess.components.forms.requisites.Pick#render\r\n * @return {string} Сгенерированная HTML-разметка\r\n */\r\n render: function() { \r\n var result = \"\";\r\n\r\n var requestMap = {\r\n \"ID\": this.id.toLowerCase(),\r\n \"Values\": this.values,\r\n \"DisplayValues\": this.displayValues, \r\n \"DisabledValues\": this.disabledValues,\r\n \"Editable\": this.editable\r\n };\r\n \r\n CallServiceSync(\"/Requisite.asmx/Pick\", requestMap, function (response) {\r\n if (response.Success) {\r\n result = response.Result.html;\r\n }\r\n else ShowMessage(response.Result);\r\n });\r\n\r\n this.fire(\"render\");\r\n this.html = result;\r\n return result;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Асинхронно генерирует HTML-разметку\r\n * @function WebAccess.components.forms.requisites.Pick#renderAsync\r\n * @return {string} Сгенерированная HTML-разметка. \r\n * @since 5.2.0.1200\r\n */\r\n renderAsync: function (opt_data) {\r\n //TODO: Этот метод использует hogan шаблон, а для его работы необходимо много данных,\r\n //в том числе частично нужны данные с серверной стороны. В будущем необходимо эти\r\n //данные научится формировать либо получать. Сейчас пока этот метод будет работать\r\n //только если предоствить все данные явно. В будущем метод render(тот что выше) нужно \r\n //будет переделать на него, но с флагами синхронного вызова.\r\n var me = this;\r\n var data = opt_data || me.getData();\r\n var result = $.Deferred();\r\n if (!opt_data) WA.raise('NOT_IMPLEMENTED_EXCEPTION')\r\n\r\n WA.templates.render(TEMPLATE, opt_data).done(function (html) {\r\n me.html = html;\r\n result.resolve(me.html);\r\n me.fire(\"render\");\r\n });\r\n\r\n return result;\r\n }\r\n });\r\n \r\n global.Pick = Pick;\r\n})(window.WebAccess.components.forms.requisites);","\"use strict\";\r\n(function (global) {\r\n\r\n var TEMPLATE = '/components/referenceRequisite.compile.html';\r\n\r\n/** \r\n* Реквизит типа «Справочник».\r\n* \r\n* @since 5.0.0.4000\r\n* @class WebAccess.components.forms.requisites.ReferenceSelect\r\n* @param {string|WebAccess.components.forms.requisites.ReferenceSelect.settings} id Идентификатор элемента. Является обязательным параметром\r\n* @param {string} referenceCode Код справочника\r\n* @param {string} [opt_toolTip] Всплывающая подсказка\r\n* @param {string} [opt_searchReqName] Название отображаемого реквизита\r\n* @param {string} [opt_filter] Выражение фильтрации элементов выбранного справочника\r\n\r\n* @property {string} id Идентификатор элемента\r\n* @property {string} referenceCode Код справочника\r\n* @property {string} toolTip Всплывающая подсказка\r\n* @property {string} searchReqName Название отображаемого реквизита\r\n* @property {string} filter Выражение фильтрации элементов выбранного справочника\r\n* @property {string} html HTML-разметка элемента\r\n*\r\n* @fires render вызывается после того, как HTML-разметка собрана и готова к использованию.\r\n* @throws ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED - заданы не все обязательные параметры.\r\n* @example\r\n* var field = new WebAccess.components.forms.requisites.ReferenceSelect(\"employe_select\", \"РАБ\").render();\r\n* WebAccess.current.sideBar.tabs.FldTree.setHtml(field);\r\n*/\r\n\r\n/** \r\n* @typedef {object} WebAccess.components.forms.requisites.ReferenceSelect.settings\r\n* @property {string} id Идентификатор формы справочника\r\n* @property {string} referenceCode Код справочника\r\n* @property {string} toolTip Всплывающая подсказка\r\n* @property {string} searchReqName Наименование отображаемого реквизита\r\n* @property {string} filter Выражение фильрации элементов выбранного справочника\r\n* @property {string} html HTML-разметка элемента\r\n*/\r\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n \r\n\r\n var ReferenceSelect = BaseObject.extend({\r\n init: function (id, referenceCode, opt_toolTip, opt_searchReqName, opt_filter) {\r\n this._super(id);\r\n if (!id) return;\r\n\r\n if ($.isPlainObject(id)) {\r\n $.extend(this, id);\r\n } else { \r\n if (!referenceCode) WA.raise(\"ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED\"); \r\n this.id = id;\r\n this.referenceCode = !!referenceCode ? referenceCode : \"ПОД\"; \r\n this.toolTip = !!opt_toolTip ? opt_toolTip : \"\";\r\n this.searchReqName = !!opt_searchReqName ? opt_searchReqName : \"Наименование\";\r\n this.filter = !!opt_filter ? opt_filter : \"\";\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"ReferenceSelect\", \r\n id: \"\",\r\n referenceCode: \"\", \r\n toolTip: \"\",\r\n searchReqName: \"Наименование\",\r\n filter: \"\",\r\n html: \"\",\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Генерировать HTML-разметку\r\n * @function WebAccess.components.forms.requisites.ReferenceSelect#render\r\n * @return {string} Сгенерированная HTML-разметка\r\n */\r\n render: function() { \r\n var result = \"\";\r\n var requestMap = { \r\n \"ID\": this.id.toLowerCase(),\r\n \"ReferenceCode\": this.referenceCode, \r\n \"ToolTip\": this.toolTip, \r\n \"SearchReqName\": this.searchReqName, \r\n \"Filter\": this.filter\r\n };\r\n\r\n CallServiceSync(\"/Requisite.asmx/ReferenceSelect\", requestMap, function (response) {\r\n if (response.Success) {\r\n result = response.Result.html;\r\n }\r\n else ShowMessage(response.Result);\r\n });\r\n\r\n this.fire(\"render\");\r\n this.html = result;\r\n return result;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Асинхронно генерирует HTML-разметку \r\n * @function WebAccess.components.forms.requisites.ReferenceSelect#renderAsync\r\n * @return {string} Сгенерированная HTML-разметка.\r\n * @since 5.2.0.1200\r\n */\r\n renderAsync: function (opt_data) {\r\n //TODO: Этот метод использует hogan шаблон, а для его работы необходимо много данных,\r\n //в том числе частично нужны данные с серверной стороны. В будущем необходимо эти\r\n //данные научится формировать либо получать. Сейчас пока этот метод будет работать\r\n //только если предоствить все данные явно. В будущем метод render(тот что выше) нужно \r\n //будет переделать на него, но с флагами синхронного вызова.\r\n var me = this;\r\n var data = opt_data || me.getData();\r\n var result = $.Deferred();\r\n if (!opt_data) WA.raise('NOT_IMPLEMENTED_EXCEPTION')\r\n\r\n WA.templates.render(TEMPLATE, opt_data).done(function (html) {\r\n me.html = html;\r\n result.resolve(me.html);\r\n me.fire(\"render\");\r\n });\r\n\r\n return result;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n \r\n global.ReferenceSelect = ReferenceSelect;\r\n})(window.WebAccess.components.forms.requisites);","'use strict';\r\n\r\n(function (global) {\r\n /**\r\n * Абстрактный класс элемента страницы.\r\n *\r\n * @extends BaseObject\r\n * @abstract\r\n * @since 5.6.0.1300\r\n */\r\n var AbstractBasePageElement = BaseObject.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#init\r\n * @override\r\n * @see BaseObject#init\r\n */\r\n init: function () {\r\n this._super();\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.AbstractBasePageElement#className\r\n * @override\r\n * @see BaseObject#className\r\n */\r\n className: 'AbstractBasePageElement',\r\n\r\n /**\r\n * jQuery-селектор элемента страницы.\r\n *\r\n * @private\r\n * @property AbstractBasePageElement#selector\r\n * @deprecated since 5.6.\r\n */\r\n selector: '',\r\n\r\n /**\r\n * Сообщение об ошибке при обращении к абстрактному методу.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.AbstractBasePageElement#_errorMessage\r\n */\r\n _errorMessage: 'Calling method of abstract class is not allowed.',\r\n\r\n /**\r\n * Признак скрытого элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#isHidden\r\n * @return {boolean} True, если элемент скрыт, иначе False.\r\n */\r\n isHidden: function () {\r\n console.error(this._errorMessage);\r\n return false;\r\n },\r\n\r\n /**\r\n * Признак доступного для изменения элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#isEnabled\r\n * @return {boolean} True, если элемент отображается, иначе False.\r\n */\r\n isEnabled: function () {\r\n console.error(this._errorMessage);\r\n return true;\r\n },\r\n\r\n /**\r\n * Признак выбора элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#isSelected\r\n * @return {boolean} True, если элемент выбран, иначе False.\r\n */\r\n isSelected: function() {\r\n console.error(this._errorMessage);\r\n return false;\r\n },\r\n\r\n /**\r\n * Отображает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#show\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n show: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Скрывает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#hide\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n hide: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Устанавливает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#setLabel\r\n * @param {string} text Заголовок элемента страницы.\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n setLabel: function (text) {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#getLabel\r\n * @return {string} Заголовок элемента страницы.\r\n */\r\n getLabel: function () {\r\n console.error(this._errorMessage);\r\n return '';\r\n },\r\n\r\n /**\r\n * Устанавливает всплывающую подсказку.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#setTooltip\r\n * @param {string} text Текст всплывающей подсказки.\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n *\r\n */\r\n setTooltip: function (text) {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает текст всплывающей подсказки.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#getTooltip\r\n * @return {string} Текст всплывающей подсказки.\r\n */\r\n getTooltip: function () {\r\n console.error(this._errorMessage);\r\n return '';\r\n },\r\n\r\n /**\r\n * Устанавливает иконку.\r\n *\r\n * Иконку необходимо разместить в папке проекта App_Sprites и после скомпилировать проект.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#setIcon\r\n * @param {string} path Путь к иконке.\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n *\r\n * @example\r\n * WebAccess.current.sideBar.tabs.create(\"FilterRRCAssignment1\")\r\n * .enable().setLabel(L(\"RRC_ASSIGNMENTS_FILTER\"))\r\n * .setIcon(\"SidebarAndExtensions/EDocumentSearch_24.png\") \r\n *\r\n * WebAccess.current.sideBar.tabs.create(\"FilterRRCAssignment1\")\r\n * .enable()\r\n * .setLabel(L(\"RRC_ASSIGNMENTS_FILTER\"))\r\n * .setIcon(\"/App_Sprites/SidebarAndExtensions/EDocumentSearch_24.png\") \r\n */\r\n setIcon: function (path) {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает имя иконки.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#getIcon\r\n * @return {string} Имя иконки.\r\n */\r\n getIcon: function () {\r\n console.error(this._errorMessage);\r\n return '';\r\n },\r\n\r\n /**\r\n * Имитировать щелчок мыши.\r\n * Имитация щелчка мыши по элементу страницы либо установка обработчика на событие onClick, если передан opt_callback.\r\n * Заменяет обработчик, установленный по умолчанию. Используется в прикладной разработке.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#click\r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по элементу.\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n *\r\n * @example\r\n * WebAccess.current.toolBar.buttons.CrtRefRecords.click();\r\n * WebAccess.current.toolBar.buttons.CrtRefRecords.click(function() {\r\n * alert(\"Существующие обработчки событий click были перезаписаны данным\");\r\n * })\r\n */\r\n click: function (opt_callback) {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает элемент страницы недоступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#disable\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n disable: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает элемент страницы доступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#enable\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n enable: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Отмечает элемент страницы.\r\n * Например, отображает кнопку как нажатую.\r\n\t *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#select\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n *\r\n */\r\n select: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n },\r\n\r\n /**\r\n * Снимает отметку с элемента страницы.\r\n\t * Например, отображает кнопку как ненажатую.\r\n *\r\n * @method WebAccess.components.wrappers.AbstractBasePageElement#unSelect\r\n * @return {WebAccess.components.wrappers.AbstractBasePageElement} Объект типа AbstractBasePageElement.\r\n */\r\n unSelect: function () {\r\n console.error(this._errorMessage);\r\n return this;\r\n }\r\n }, {\r\n EVENT: {\r\n // Событие срабатывает при изменении модели элемента.\r\n CHANGE: 'change',\r\n // Событие срабатывает, когда элемент становится недоступным для изменения.\r\n DISABLE: 'disable',\r\n // Событие срабатывает, когда элемент становится доступным для изменения.\r\n ENABLE: 'enable',\r\n // Событие срабатывает, когда элемент становится невидимым.\r\n HIDE: 'hide',\r\n // Событие срабатывает, когда элемент становится видимым.\r\n SHOW: 'show'\r\n }\r\n });\r\n\r\n global.AbstractBasePageElement = AbstractBasePageElement;\r\n})(window.WebAccess.components.wrappers);","'use strict';\r\n\r\n(function (global) {\r\n /**\r\n * Класс React-элемента страницы.\r\n *\r\n * @abstract\r\n * @extends AbstractBasePageElement\r\n * @since 5.6.0.1300\r\n */\r\n var BaseReactPageElement = WebAccess.components.wrappers.AbstractBasePageElement.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method BaseReactPageElement#init\r\n * @param {object} model Модель React-элемента страницы.\r\n * @fires BaseObject.EVENTS#CLASS_INIT\r\n */\r\n init: function (model) {\r\n this._model = model;\r\n this.name = this._model.name;\r\n this._events = this._model.events;\r\n this.fire(BaseObject.EVENT.CLASS_INIT, this);\r\n this._formatModel();\r\n if (this._model.jsAction instanceof Function) {\r\n this.bind(BaseObject.EVENT.CLICK, this._model.jsAction);\r\n }\r\n },\r\n\r\n /**\r\n * Форматирование модели.\r\n *\r\n * @private\r\n * @method BaseReactPageElement#_formatModel\r\n */\r\n _formatModel: function () {\r\n this._model.onInit = this._formatFunction('onInit');\r\n this._model.jsAction = this._formatFunction('jsAction');\r\n },\r\n\r\n /**\r\n * Преобразование строк в функции.\r\n *\r\n * @method BaseReactPageElement#_formatFunction\r\n * @param {string} paramName Имя параметра из модели.\r\n * @returns {function|null} Функция или null.\r\n * @private\r\n */\r\n _formatFunction(paramName) {\r\n let paramValue = this._model[paramName];\r\n if (paramValue) {\r\n if (paramValue instanceof Function) {\r\n return paramValue.bind(this);\r\n } else if (typeof paramValue === 'string' || paramValue instanceof String) {\r\n return (new Function(this._model[paramName])).bind(this);\r\n }\r\n }\r\n return null;\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property BaseReactPageElement#className\r\n * @override\r\n * @see AbstractBasePageElement#className\r\n */\r\n className: 'BaseReactPageElement',\r\n\r\n /**\r\n * Список обработчиков событий.\r\n *\r\n * @private\r\n * @property BaseReactObject#_events\r\n * @override\r\n * @see BaseObject#_events\r\n */\r\n _events: null,\r\n\r\n /**\r\n * Модель React-элемента страницы.\r\n *\r\n * @private\r\n * @property BaseReactPageElement#_model\r\n */\r\n _model: null,\r\n\r\n /**\r\n * Наименование элемента.\r\n *\r\n * @property BaseReactPageElement#name\r\n */\r\n name: '',\r\n\r\n /**\r\n * Признак скрытого элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#isHidden\r\n * @return {boolean} True, если элемент скрыт, иначе False.\r\n * @override\r\n * @see AbstractBasePageElement#isHidden\r\n */\r\n isHidden: function () {\r\n return !this._model.isVisible;\r\n },\r\n\r\n /**\r\n * Признак доступного для изменения элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#isEnabled\r\n * @return {boolean} True, если элемент отображается, иначе False.\r\n * @override\r\n * @see AbstractBasePageElement#isEnabled\r\n */\r\n isEnabled: function () {\r\n return this._model.isEnabled;\r\n },\r\n\r\n /**\r\n * Признак выбора элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#isSelected\r\n * @return {boolean} True, если элемент выбран, иначе False.\r\n * @override\r\n * @see AbstractBasePageElement#isSelected\r\n */\r\n isSelected: function () {\r\n return this._model.isSelected;\r\n },\r\n\r\n /**\r\n * Отображает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#show\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#show\r\n * @override\r\n * @see AbstractBasePageElement#show\r\n */\r\n show: function () {\r\n this._model.isVisible = true;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.SHOW);\r\n return this;\r\n },\r\n\r\n /**\r\n * Скрывает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#hide\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#hide\r\n * @override\r\n * @see AbstractBasePageElement#hide\r\n */\r\n hide: function () {\r\n this._model.isVisible = false;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.HIDE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Устанавливает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#setLabel\r\n * @param {string} text Заголовок элемента страницы.\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#change\r\n * @override\r\n * @see AbstractBasePageElement#setLabel\r\n */\r\n setLabel: function (text) {\r\n this._model.text = text;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#getLabel\r\n * @return {string} Заголовок элемента страницы.\r\n * @override\r\n * @see AbstractBasePageElement#getLabel\r\n */\r\n getLabel: function () {\r\n return this._model.text;\r\n },\r\n\r\n /**\r\n * Устанавливает всплывающую подсказку.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#setTooltip\r\n * @param {string} text Текст всплывающей подсказки.\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#change\r\n * @override\r\n * @see AbstractBasePageElement#setTooltip\r\n *\r\n * @todo Подумать над установкой, т.к. у объекта две подсказки, какая устанавливается? Куда сохранять?\r\n *\r\n */\r\n setTooltip: function (text) {\r\n this._model.tooltip = text;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает текст всплывающей подсказки.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#getTooltip\r\n * @return {string} Текст всплывающей подсказки.\r\n * @override\r\n * @see AbstractBasePageElement#getTooltip\r\n */\r\n getTooltip: function () {\r\n return this._model.tooltip;\r\n },\r\n\r\n /**\r\n * Устанавливает иконку.\r\n *\r\n * Иконку необходимо разместить в папке проекта App_Sprites и после скомпилировать проект.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#setIcon\r\n * @param {string} path Путь к иконке.\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#change\r\n * @override\r\n * @see AbstractBasePageElement#setIcon\r\n */\r\n setIcon: function (path) {\r\n this._model.icon = path;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает имя иконки.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#getIcon\r\n * @return {string} Имя иконки.\r\n * @override\r\n * @see AbstractBasePageElement#getIcon\r\n */\r\n getIcon: function () {\r\n return this._model.icon;\r\n },\r\n\r\n /**\r\n * Имитирует щелчок мыши.\r\n * Имитация щелчка мыши по элементу страницы либо установка обработчика на событие onClick, если передан opt_callback.\r\n * Заменяет обработчик, установленный по умолчанию. Используется в прикладной разработке.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#click\r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по элементу.\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @override\r\n * @see AbstractBasePageElement#click\r\n */\r\n click: function (opt_callback) {\r\n if (typeof opt_callback === 'function') {\r\n this\r\n .unbind(BaseObject.EVENT.CLICK)\r\n .bind(BaseObject.EVENT.CLICK, opt_callback);\r\n } else {\r\n this.fire(BaseObject.EVENT.CLICK);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает элемент страницы недоступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#disable\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#disable\r\n * @override\r\n * @see AbstractBasePageElement#disable\r\n */\r\n disable: function () {\r\n this._model.isEnabled = false;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.DISABLE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает элемент страницы доступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#enable\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @fires BaseReactPageElement#enable\r\n * @override\r\n * @see AbstractBasePageElement#enable\r\n */\r\n enable: function () {\r\n this._model.isEnabled = true;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.ENABLE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Отмечает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#select\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @override\r\n * @see AbstractBasePageElement#select\r\n */\r\n select: function () {\r\n this._model.isSelected = true;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Снимает отметку с элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BaseReactPageElement#unSelect\r\n * @return {WebAccess.components.wrappers.BaseReactPageElement} Объект типа BaseReactPageElement.\r\n * @override\r\n * @see AbstractBasePageElement#unSelect\r\n */\r\n unSelect: function () {\r\n this._model.isSelected = false;\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n }\r\n });\r\n\r\n global.BaseReactPageElement = BaseReactPageElement;\r\n})(window.WebAccess.components.wrappers);","'use strict';\r\n\r\n/** \r\n* Базовый объект страницы.\r\n*\r\n* @class WebAccess.components.wrappers.BasePageElement\r\n* @extends AbstractBasePageElement\r\n* @property {string} className Имя класса\r\n* @property {string} name Имя объекта\r\n* @property {string} selector Селектор для работы с объектом вне API\r\n*/\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Класс jQuery-элемента на странице.\r\n *\r\n * @abstract\r\n * @extends WebAccess.components.wrappers.AbstractBasePageElement\r\n */\r\n var BasePageElement = WebAccess.components.wrappers.AbstractBasePageElement.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @param {string} itemSelector Селектор существующего элемента страницы\r\n * @method WebAccess.components.wrappers.BasePageElement#init\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#init\r\n */\r\n init: function (itemSelector) {\r\n this._super(itemSelector);\r\n this._jObject = $(itemSelector);\r\n this.name = this._jObject.attr('name');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.BasePageElement#className\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#className\r\n */\r\n className: 'BasePageElement',\r\n\r\n /**\r\n * Имя элемента страницы.\r\n *\r\n * @private\r\n * @property BasePageElement#name\r\n */\r\n name: '',\r\n\r\n /**\r\n * jQuery-объект элемента страницы.\r\n *\r\n * @private\r\n * @property BasePageElement#_jObject\r\n */\r\n _jObject: {},\r\n\r\n /**\r\n * События, связанные с текущих элементом страницы.\r\n *\r\n * @private\r\n * @property BasePageElement#_storedEvents\r\n */\r\n _storedEvents: [],\r\n\r\n\r\n /**\r\n * jQuery-селектор элемента страницы с использованием имени элемента.\r\n *\r\n * @private\r\n * @property BasePageElement#_byNameSelectorTemplate\r\n */\r\n _byNameSelectorTemplate: '{0}[name={1}]',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак скрытия элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#isHidden\r\n * @return {boolean} True, если элемент скрыт, иначе False.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#isHidden\r\n */\r\n isHidden: function () {\r\n return !this._jObject.is(':visible');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак отображения элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#isEnabled\r\n * @return {boolean} True, если элемент отображается, иначе False.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#isEnabled\r\n */\r\n isEnabled: function () {\r\n return !this._jObject.hasClass('disabled');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак выбора элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#isSelected\r\n * @return {boolean} True, если элемент выбран, иначе False.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#isSelected\r\n */\r\n isSelected: function () {\r\n return this._jObject.hasClass('selected');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает элемент страницы.\r\n * \r\n * @method WebAccess.components.wrappers.BasePageElement#show\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#show\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#show\r\n */\r\n show: function () {\r\n this._jObject.show();\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.SHOW);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрывает элемент страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#hide\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#hide\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#hide\r\n */\r\n hide: function () {\r\n this._jObject.hide();\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.HIDE);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#setLabel\r\n * @param {string} text Заголовок элемента страницы.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#change\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#setLabel\r\n */\r\n setLabel: function (text) {\r\n this._jObject.find('span').text(text);\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает заголовок элемента страницы.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#getLabel\r\n * @return {string} Заголовок элемента страницы.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#getLabel\r\n */\r\n getLabel: function () {\r\n return this._jObject.find('span').text();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Устанавливает всплывающую подсказку.\r\n *\r\n * @fires BasePageElement#change\r\n * @method WebAccess.components.wrappers.BasePageElement#setTooltip\r\n * @override\r\n * @param {string} tooltip Текст всплывающей подсказки.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#setTooltip\r\n */\r\n setTooltip(tooltip) {\r\n let label = this.getLabel();\r\n // Добавим название кнопки в подсказку к этой кнопке.\r\n if (tooltip !== label) {\r\n tooltip = `${label}\\n${tooltip}`;\r\n }\r\n this._jObject.attr('title', tooltip);\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает текст всплывающей подсказки.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#getTooltip\r\n * @return {string} Текст всплывающей подсказки.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#getTooltip\r\n */\r\n getTooltip: function () {\r\n return this._jObject.attr('title');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает иконку.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#setIcon\r\n * @param {string} path Путь к иконке.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#change\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#setIcon\r\n */\r\n setIcon: function (path) {\r\n\r\n if (path.indexOf('.') !== -1) {\r\n\r\n var jSvgIcon = this._jObject.find('svg');\r\n\r\n if (jSvgIcon.length != 0) {\r\n jSvgIcon.remove();\r\n var jContainer = this._jObject.find('div').first();\r\n jContainer.prepend('

    ');\r\n }\r\n\r\n if (path.indexOf('/App_Sprites/') !== -1) {\r\n path = path.substring(path.indexOf('s/') + 2);\r\n }\r\n\r\n this._jObject.find('p').first().removeClass().addClass(path);\r\n }\r\n else {\r\n var jSpriteIcon = this._jObject.find('p').first();\r\n if (jSpriteIcon.length !== 0) {\r\n var jContainer = this._jObject.find('div').first();\r\n jSpriteIcon.remove();\r\n jContainer.prepend('');\r\n }\r\n else {\r\n var jUseElement = this._jObject.find('use').first();\r\n jUseElement.attr('xlink:href', '#' + path);\r\n }\r\n }\r\n\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.CHANGE);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает имя иконки.\r\n * \r\n * @method WebAccess.components.wrappers.BasePageElement#getIcon\r\n * @return {string} Имя иконки.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#getIcon\r\n */\r\n getIcon: function () {\r\n\r\n var jSvgIcon = this._jObject.find('svg');\r\n\r\n if (jSvgIcon.length !== 0)\r\n return jSvgIcon.children('use').attr('xlink:href').substr(1);\r\n\r\n return this._jObject.find('p').first().attr('class');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Имитирует щелчок мыши на кнопке или устанавливает обработчик на событие onClick, если передан параметр opt_callback.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#click\r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по кнопке.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#click\r\n */\r\n click: function (opt_callback) {\r\n var instance = this;\r\n if ($.isFunction(opt_callback)) {\r\n instance._disableClickHandler(instance._jObject);\r\n instance\r\n .unbind(BaseObject.EVENT.CLICK)\r\n .bind(BaseObject.EVENT.CLICK, opt_callback);\r\n } else {\r\n instance._jObject.click();\r\n }\r\n return instance;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает действие по умолчанию.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_defaultAction\r\n * @return {function} Действие по умолчанию.\r\n */\r\n _defaultAction: function () {\r\n if (!this._inlineEvent) return;\r\n return (new Function(this._inlineEvent)).call(this._jObject.get(0));\r\n },\r\n\r\n /**\r\n * Вызов нашего fire при клике на элемент.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_eventHandler\r\n */\r\n _eventHandler: function (event) {\r\n var eventName = event.data.eventName;\r\n var name = event.data.buttonName;\r\n var element = event.data.instance;\r\n var continueDefaultAction = event.data.continueDefaultAction;\r\n\r\n if (element.fire(eventName, name, continueDefaultAction) !== false && eventName === 'click') {\r\n element._defaultAction.call(element);\r\n }\r\n },\r\n\r\n /**\r\n * Привязывает функцию к событию.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#bind\r\n * @param {string} name Имя события.\r\n * @param {function} callback Функция, срабатывающая при событии.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @override\r\n * @see WebAccess.components.wrappers.BaseObject#bind\r\n */\r\n bind: function (event, callback) {\r\n var instance = this;\r\n if (event === 'click') {\r\n this._storeInlineEvents();\r\n }\r\n\r\n this._super(event, callback);\r\n //if (event == \"click\") this._disableClickHandler(this._jObject); \r\n this._jObject.unbind(event, this._eventHanler).bind(event, {\r\n 'instance': instance,\r\n 'eventName': event,\r\n 'buttonName': instance.name,\r\n 'continueDefaultAction': $.proxy(instance._defaultAction, instance)\r\n }, this._eventHandler);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Отключение обработчика click у объекта.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_disableClickHandler\r\n * @param {object} jObject - jQuery-обеъект, у которого отключается обработчик.\r\n */\r\n _disableClickHandler: function (jObject) {\r\n\r\n jObject.removeAttr('onclick'); // Здесь именно так \r\n jObject.prop('onclick', null); // именно две строки\r\n\r\n jObject.off('click');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает элемент страницы недоступным.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#disable\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#disable\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#disable\r\n */\r\n disable: function () {\r\n if (this.isEnabled()) { // Без этого если вызывать disable 2 раза, то он потеряет события вообще.\r\n this._storeEvents();\r\n this._jObject.unbind('click');\r\n this._jObject.addClass('disabled').removeClass('hover');\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.DISABLE);\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает элемент страницы доступным.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#enable\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @fires BasePageElement#enable\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#enable\r\n */\r\n enable: function () {\r\n if (!this.isEnabled()) {\r\n this._jObject.removeClass('disabled');\r\n this._restoreEvents();\r\n this.fire(WebAccess.components.wrappers.AbstractBasePageElement.EVENT.ENABLE);\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохранение привязанных обработчиков событий\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#_storeEvents\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n */\r\n _storeEvents: function () {\r\n this._storeInlineEvents();\r\n this._storedEvents = this._events;\r\n\r\n this._events = [];\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохранение того, что было навешено на атрибут onclick.\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_storeInlineEvents\r\n */\r\n _storeInlineEvents: function () {\r\n if (this._jObject.hasAttr('onclick')) {\r\n if (WA.ENV.browser.name !== 'IE' && WA.ENV.browser.major !== '7') {\r\n this._inlineEvent = this._jObject.attr('onclick'); //Здесь имеенно attr, не prop! и точка.\r\n this._jObject.removeAttr('onclick'); // Аналогично\r\n }\r\n //this._jObject.prop(\"onclick\")\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Восстановление привязанных обработчиков событий\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_storeEvents\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n */\r\n _restoreEvents: function () {\r\n this._restoreInlineEvents();\r\n if (Object.keys(this._storedEvents).length > 0) {\r\n this._events = this._storedEvents;\r\n this._storedEvents = [];\r\n\r\n var instance = this;\r\n for (var event in this._events) {\r\n if (this._events.hasOwnProperty(event)) {\r\n this._jObject.bind(event, function () {\r\n instance.fire(event, instance.name);\r\n });\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Восстановление привязанных атрибутом обработчиков событий onclick\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.BasePageElement#_restoreInlineEvents\r\n */\r\n _restoreInlineEvents: function () {\r\n if (this._inlineEvent !== '') {\r\n this._jObject.attr('onclick', this._inlineEvent);\r\n } //И здесь имеенно attr, не prop! железно!\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает кнопку как нажатую.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#select\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#select\r\n */\r\n select: function () {\r\n this._jObject.addClass('selected');\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает кнопку как ненажатую.\r\n *\r\n * @method WebAccess.components.wrappers.BasePageElement#unSelect\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n * @override\r\n * @see WebAccess.components.wrappers.AbstractBasePageElement#unSelect\r\n */\r\n unSelect: function () {\r\n this._jObject.removeClass('selected');\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n global.BasePageElement = BasePageElement;\r\n\r\n})(window.WebAccess.components.wrappers);\r\n","/**\r\n * Обработчик нажатия на кнопку \"Высокая важность\" в карточке задачи.\r\n *\r\n * @global\r\n * @async\r\n * @function toggleHighImportance\r\n * @param {string} SaveBtnName Название кнопки \"Сохранить\". Кнопка станет доступна после нажатия на кнопку «Высокая важность».\r\n */\r\nasync function toggleHighImportance(SaveBtnName) {\r\n await _sendSetImportanceRequest(TASK_IMPORTANCE.HIGH, SaveBtnName);\r\n _changeImportanceButtonStates('TaskHighImp', 'TaskLowImp');\r\n}\r\n\r\n/**\r\n * Обработчик нажатия на кнопку \"Низкая важность\" в карточке задачи.\r\n *\r\n * @global\r\n * @async\r\n * @function toggleLowImportance\r\n * @param {string} SaveBtnName Название кнопки \"Сохранить\". Кнопка станет доступна после нажатия на кнопку «Низкая важность».\r\n */\r\nasync function toggleLowImportance(SaveBtnName) {\r\n await _sendSetImportanceRequest(TASK_IMPORTANCE.LOW, SaveBtnName);\r\n _changeImportanceButtonStates('TaskLowImp', 'TaskHighImp');\r\n}\r\n\r\n/**\r\n * Отправляет запрос на установку важности задачи.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _sendSetImportanceRequest\r\n * @param {TASK_IMPORTANCE} level Важность задачи.\r\n * @param {string} SaveBtnName Название кнопки \"Сохранить\", чтобы разблокировать её.\r\n */\r\nfunction _sendSetImportanceRequest(level, SaveBtnName) {\r\n return new Promise((resolve, reject) => {\r\n WA.SRV.call('/Task.asmx/SetImportance', {\r\n TaskID: WA.CR.ID,\r\n Importance: level,\r\n }).done((level) => {\r\n WA.CR.toolBar.buttons[SaveBtnName].enable();\r\n WA.Task.Importance = WA.CR.Importance = level;\r\n resolve();\r\n }).fail((message) => {\r\n reject(message);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Устанавливает выделенность кнопок важности задачи.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _changeImportanceButtonStates\r\n * @param {string} settableButtonName Имя кнопки, которая была нажата.\r\n * @param {string} resetButtonName Имя кнопки, выделение которой будет снято.\r\n */\r\nfunction _changeImportanceButtonStates(settableButtonName, resetButtonName) {\r\n let settableImportanceButton = WA.CR.toolBar.buttons[settableButtonName];\r\n if (settableImportanceButton.isSelected()) {\r\n settableImportanceButton.unSelect();\r\n } else {\r\n settableImportanceButton.select();\r\n }\r\n\r\n let resetImportanceButton = WA.CR.toolBar.buttons[resetButtonName];\r\n if (resetImportanceButton.isSelected()) {\r\n resetImportanceButton.unSelect();\r\n }\r\n}\r\n\r\n/**\r\n * Устанавливает важность задачи.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function DoImportance\r\n * @param {object} el DOM-элемент кнопки панели действий.\r\n * @param {string} val Устанавливаемая важность.\r\n * @param {string} css Добавляемый класс.\r\n * @deprecated since 5.6.0.1300\r\n */\r\nfunction DoImportance(el, val, css) {\r\n UnbindBeforeUnload();\r\n MakeRequestImportance(GetParamInURL('id'), val, function (res) {\r\n if (res.d) {\r\n if ($(el).hasClass(css)) {\r\n $(el).removeClass(css);\r\n } else {\r\n $(el).addClass(css);\r\n }\r\n if (val === 'High') {\r\n $(el).next().removeClass(css);\r\n } else if (val === 'Low') {\r\n $(el).prev().removeClass(css);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Сформировать и отправить запрос на установку важности.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function MakeRequestImportance\r\n * @param {number} TaskID ИД задачи.\r\n * @param {string} Value Устанавливаемая важность.\r\n * @param {function} CallbackFunc Callback-функция.\r\n * @deprecated since 5.6.0.1300\r\n */\r\nfunction MakeRequestImportance(TaskID, Value, CallbackFunc) {\r\n var WSSParam = GetWSSParam(location.href, true);\r\n $.ajax({\r\n type: 'POST',\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n url: '/Task.asmx/DoImportance' + WSSParam,\r\n data: '{\"TaskID\":\"' + TaskID + '\", \"Value\":\"' + Value + '\"}',\r\n success: function (res) {\r\n if (!CheckForLoginPage(res.d)) {\r\n CallbackFunc(res);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Устанавливает высокую важность для задачи.\r\n * \r\n * @global\r\n * @function DoHighImportance\r\n * @param {object} el DOM-элемент кнопки \"Высокая важность\".\r\n * @deprecated since 5.6.0.1300\r\n */\r\nfunction DoHighImportance(el) {\r\n DoImportance(el, 'High', 'selected');\r\n}\r\n\r\n/**\r\n * Устанавливает низкую важность для задачи.\r\n *\r\n * @global\r\n * @function DoLowImportance\r\n * @param {object} el DOM-элемент кнопки \"Низкая важность\".\r\n * @deprecated since 5.6.0.1300\r\n */\r\nfunction DoLowImportance(el) {\r\n DoImportance(el, 'Low', 'selected');\r\n}","/**\r\n * Получить список ИД пользователей из значения реквизита формы.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _getUserList\r\n * @param {string} sourceVal Строка со значением реквизита.\r\n * @returns {number[]} Массив ИД.\r\n */\r\nfunction _getUserList(sourceVal) {\r\n if (sourceVal) {\r\n return sourceVal.split(';').map((val) => {\r\n // ToDo: исправить это недоразумение\r\n if (val.indexOf('_') + 1) {\r\n return val.split('_')[1];\r\n } else {\r\n return val.split(':')[1];\r\n }\r\n });\r\n } else {\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Получить тип задания.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _getJobKind\r\n * @returns {JOB_KIND|integer} Тип заданий.\r\n */\r\nfunction _getJobKind() {\r\n if ($('input#hiddCardContrrolJobsType').val() === 'J') {\r\n return JOB_KIND.JOB;\r\n } else {\r\n return JOB_KIND.NOTICE;\r\n }\r\n}\r\n\r\n/**\r\n * Получить селектор для срока задачи.\r\n *\r\n * @global\r\n * @private \r\n * @function _getTaskDeadlineSelector\r\n * @returns {string} Селектор для срока задачи.\r\n */\r\nfunction _getTaskDeadlineSelector() { \r\n return '#CardContrrolStepsDeadline'; \r\n}\r\n\r\n/**\r\n * Получить список параметров запроса.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _getQueryParams\r\n * @returns {object} Параметры запроса.\r\n */\r\nfunction _getQueryParams() {\r\n return {\r\n TaskID: WA.CR.ID,\r\n Subject: $('input#CardContrrolSubject').val(),\r\n ActiveText: $('textarea#CardContrrolEditedText').val(),\r\n Observers: _getUserList($('input[name=CardContrrolObservers]').val()),\r\n Performers: _getUserList($('input#hSelID_CardContrrolRoute').val()),\r\n JobKind: _getJobKind(),\r\n Deadline: $(_getTaskDeadlineSelector()).val() || '',\r\n InitiatorId: $('#hSelID_CardContrrolInitiator').val(),\r\n RouteType: $('#hiddCardContrrolRouteType').val() || '',\r\n Rights: $('#hiddCardContrrolRightsType').val(),\r\n IsEncyptEnabled: $('#EncryptWithCertCheck').is(':checked')\r\n };\r\n}\r\n\r\n/**\r\n * Обновить папку \"Входящие\".\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _updateFolderList\r\n */\r\nfunction _updateFolderList() {\r\n if (opener && opener.WA.getLocation() === 'explorer' && opener.WA.CR.objectList) {\r\n opener.WA.CR.objectList.reload();\r\n }\r\n}\r\n\r\n/**\r\n * Полное обновление вкладки Карточка.\r\n *\r\n * @global\r\n * @private\r\n * @ignore\r\n * @function _cardTabFullUpdate\r\n * @param {object} model Модель всей вкладки Карточки.\r\n */\r\nfunction _cardTabFullUpdate(model) {\r\n WA.CR.initOrUpdateCardTab(model.cardTabModel);\r\n\r\n const headerElement = $('.react-container')[0];\r\n if (!WA.CR.IsNew) {\r\n WA.CR.initCardHeader(\r\n headerElement,\r\n model.cardHeaderModel,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Сохранить задачу.\r\n *\r\n * @global\r\n * @function saveTask\r\n */\r\nfunction saveTask() {\r\n WA.SRV.call('Task.asmx/Save', _getQueryParams()).done((model) => {\r\n let modelWrapper = JSON.parse(model);\r\n WA.CR.IsNew = modelWrapper.isNew;\r\n _cardTabFullUpdate(modelWrapper.model);\r\n // Раздизейблим вкладки, которые мы дизейблили в бэекенде для новой задачи.\r\n if (!WA.CR.IsNew) {\r\n let sideBarTabs = WA.CR.sideBar.tabs.toArray();\r\n let tabIdsToEnable = [\r\n TAB_TYPE.HISTORY,\r\n TAB_TYPE.ROUTE_SCHEME,\r\n ];\r\n let tabNamesToEnable = tabIdsToEnable.map((tabId) => {\r\n return WA.CR._getTabName(tabId);\r\n });\r\n sideBarTabs.forEach((tab) => {\r\n if (tabNamesToEnable.includes(tab.name)) {\r\n tab.enable();\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Стартовать задачу.\r\n *\r\n * @global\r\n * @function startTask\r\n * @param {object} model Модель задачи.\r\n * @param {ACCESS_RIGHTS} accessRights Устанавливаемые права доступа.\r\n */\r\nfunction startTask(model = _getQueryParams(), accessRights = ACCESS_RIGHTS.NO_ACCESS) {\r\n const params = Object.assign(model, {\r\n AccessRights: accessRights,\r\n }); \r\n\r\n const callStartTask = () => {\r\n WA.SRV.call('Task.asmx/Start', params,null,null,true).done((maxRights) => {\r\n // Предпринимаем попытку старта задачи. Возможна ситуация, когда\r\n // исполнителям по задаче не будет хватать прав на задачу.\r\n // Необходимо запросить их.\r\n if (maxRights && maxRights != ACCESS_RIGHTS.NO_ACCESS) {\r\n Core.customWorks.showAccessRightsDialog(maxRights, {\r\n View : () => startTask(model, ACCESS_RIGHTS.VIEW),\r\n Change: () => startTask(model, ACCESS_RIGHTS.CHANGE),\r\n Full: () => startTask(model, ACCESS_RIGHTS.FULL),\r\n Ignore: () => startTask(model, ACCESS_RIGHTS.EMPTY),\r\n }, L('WARN_ASSIGN_TASK_ATTACHMENTS_RIGHTS_DLG_MSG'));\r\n } else {\r\n _updateFolderList();\r\n WA.CR.window.unbind('beforeClose');\r\n window.close();\r\n }\r\n })\r\n .error((errorText,result)=> {\r\n var maxRights = result.Result;\r\n if (maxRights != ACCESS_RIGHTS.NO_ACCESS) {\r\n let dialogMessage = L('WRN_CANNOT_SET_ATTACHMENTS_RIGHTS') + '
    ' + errorText;\r\n Core.customWorks.showAccessRightsDialog(maxRights, {\r\n View : () => startTask(model, ACCESS_RIGHTS.VIEW),\r\n Change: () => startTask(model, ACCESS_RIGHTS.CHANGE),\r\n Full: () => startTask(model, ACCESS_RIGHTS.FULL),\r\n Ignore: () => startTask(model, ACCESS_RIGHTS.EMPTY),\r\n }, dialogMessage);\r\n } else {\r\n WA.CR.inlineHint.showError(errorText);\r\n } \r\n });\r\n };\r\n\r\n const showTaskDeadlineActualizeDialog = () => { \r\n const taskDeadlineActualizeButtons = [\r\n {\r\n id: 'ActualizeButton',\r\n caption: L('ACTUALIZE'),\r\n onClick: () => { \r\n taskDeadlineActualizeDialog.bind(WA.CMP.dialogs.MessageBox.EVENT.AFTER_CLOSE, (dialog) => {\r\n $(_getTaskDeadlineSelector()).focus();\r\n }); \r\n },\r\n },\r\n {\r\n id: 'NoActualizeButton',\r\n caption: L('NOACTUALIZE'),\r\n onClick: callStartTask,\r\n } \r\n ];\r\n const taskDeadlineActualizeDialog = new WA.CMP.dialogs.MessageBox();\r\n for (const buttonModel of taskDeadlineActualizeButtons) { \r\n taskDeadlineActualizeDialog.addButton(buttonModel.id, buttonModel.caption, buttonModel.onClick); \r\n }\r\n taskDeadlineActualizeDialog.isShowOkButton = false; \r\n taskDeadlineActualizeDialog.isShowCancelButton = true; \r\n\r\n taskDeadlineActualizeDialog.showQuestion(L('TASK_DEADLINE_ACTUALIZE_MSG')); \r\n };\r\n\r\n\r\n let isDeadlineActual = true;\r\n if (params.Deadline) {\r\n const deadLine = parseDateTime(params.Deadline);\r\n if (deadLine) {\r\n // Если время не задано, то срок выполнения ставим на конец суток, чтобы корректно сравнивать с актуальной датой\r\n if (deadLine.getHours() === 0 && deadLine.getMinutes() === 0 && deadLine.getSeconds() === 0) {\r\n deadLine.setHours(23);\r\n deadLine.setMinutes(59);\r\n deadLine.setSeconds(59);\r\n }\r\n const difference = (Date.now() - deadLine.getTime()); \r\n isDeadlineActual = (difference <= 0);\r\n } \r\n } \r\n\r\n if (isDeadlineActual) { \r\n callStartTask(); \r\n } else {\r\n showTaskDeadlineActualizeDialog();\r\n } \r\n}\r\n\r\n/**\r\n * Прекратить задачу.\r\n *\r\n * @global\r\n * @function abortTask\r\n */\r\nfunction abortTask() {\r\n WA.SRV.call('Task.asmx/Abort', {\r\n TaskID: WA.CR.ID\r\n }).done((model) => {\r\n _updateFolderList();\r\n _cardTabFullUpdate(JSON.parse(model));\r\n });\r\n}\r\n\r\n/**\r\n * Возобновить задачу.\r\n *\r\n * @global\r\n * @function restoreTask\r\n */\r\nfunction restoreTask() {\r\n WA.SRV.call('Task.asmx/Restore', {\r\n TaskID: WA.CR.ID\r\n }).done((model) => {\r\n _updateFolderList();\r\n WA.CR.window.unbind('beforeClose');\r\n window.close();\r\n });\r\n}\r\n\r\n/**\r\n * Рестартовать задачу.\r\n *\r\n * @global\r\n * @function restartTask\r\n */\r\nfunction restartTask() {\r\n WA.SRV.call('Task.asmx/Restart', {\r\n TaskID: WA.CR.ID\r\n }).done((model) => {\r\n _updateFolderList();\r\n _cardTabFullUpdate(JSON.parse(model));\r\n });\r\n}\r\n\r\n/**\r\n * Переключение между режимом чтения и редактирования.\r\n *\r\n * @global\r\n * @function toggleChange\r\n * @param {WA.CMP.wrappers.toolBar.ReactToolBarButton|WA.CMP.wrappers.toolBar.ToolBarButton} btn Кнопка панели действий.\r\n */\r\nfunction toggleChange(btn) {\r\n const isEditMode = btn.isSelected();\r\n const params = {\r\n TaskID: WA.CR.ID,\r\n IsEditMode: isEditMode,\r\n };\r\n if (isEditMode && WA.CR.CardTab.mainTab && WA.CR.CardTab.mainTab.isModifiedByUser()) {\r\n ConfirmDialogNew(L('UNSAVED_CHANGES_WILL_BE_LOST'), () => { \r\n WA.SRV.call('Task.asmx/ToogleChange', params).done((model) => _cardTabFullUpdate(JSON.parse(model)));\r\n });\r\n } else { \r\n WA.SRV.call('Task.asmx/ToogleChange', params).done((model) => _cardTabFullUpdate(JSON.parse(model))); \r\n } \r\n}\r\n\r\n/**\r\n * Старт задачи.\r\n *\r\n * @global\r\n * @function StartTask\r\n * @deprecated since 5.6. Use startTask function instead.\r\n */\r\nfunction StartTask() {\r\n startTask();\r\n}\r\n\r\n/**\r\n * Прекращение задачи.\r\n *\r\n * @global\r\n * @function AbortTask\r\n * @deprecated since 5.6. Use abortTask function instead.\r\n */\r\nfunction AbortTask() {\r\n abortTask();\r\n}\r\n\r\n/**\r\n * Рестарт задачи.\r\n *\r\n * @global\r\n * @function RestartTask\r\n * @deprecated since 5.6. Use restartTask function instead.\r\n */\r\nfunction RestartTask() {\r\n restartTask();\r\n}\r\n\r\n/**\r\n * Возобновление задачи.\r\n *\r\n * @global\r\n * @function RestoreTask\r\n * @deprecated since 5.6. Use restoreTask function instead.\r\n */\r\nfunction RestoreTask() {\r\n restoreTask();\r\n}","'use strict';\r\n\r\n/**\r\n* Кнопка панели действий.\r\n* \r\n* @class WebAccess.components.wrappers.toolBar.ToolBarButton\r\n* @extends WebAccess.components.wrappers.BasePageElement\r\n* @property {string} name Имя кнопки\r\n* @property {group} groupName Группа, в которой находится кнопка\r\n* @property {string} selector Путь в DOM-иерархии к объекту кнопки, например div.content#container \r\n* @property {boolean} isSynthetic Признак, указывающий на то, что кнопка была создана средствами API\r\n* @param {string} itemSelector Существующий элемент страницы\r\n*/\r\n\r\n(function (global) {\r\n\r\n var buttonSelector = \"div.toolbar_button\";\r\n var groupSelector = \"div.toolbar_group\";\r\n\r\n // Признак доступности действия, если в области вложений выделен хотя бы один элемент.\r\n var isEnabledOnAttachmentSelected = 1 << 0;\r\n\r\n // Признак доступности действия, если ЗЗУ прекращено.\r\n var isEnabledOnAborted = 1 << 1;\r\n\r\n // Признак доступности действия, если ЗЗУ выполнено.\r\n var isEnabledOnDone = 1 << 2;\r\n\r\n // Признак доступности действия, если ЗЗУ в работе.\r\n var isEnabledOnRunning = 1 << 3;\r\n\r\n var ToolBarButton = global.components.wrappers.BasePageElement.extend({\r\n init: function (itemSelector) {\r\n this._super(itemSelector);\r\n this.selector = format(this._byNameSelectorTemplate, buttonSelector, this.name);\r\n this.groupName = this._jObject.parents(groupSelector).attr(\"name\");\r\n this._jGroup = this._jObject.parents(groupSelector);\r\n\r\n // Установка свойства связанного прикладного действия\r\n this._linkedAction = this._jObject.data('linkedaction');\r\n this._enabledMode = this._jObject.data('enabledmode');\r\n var enabledWhen = this._jObject.data('enabledwhen');\r\n if (enabledWhen) {\r\n this._enabledWhen = enabledWhen;\r\n }\r\n let contentsActionEnableMode = this._jObject.data('contentsactionenablemode');\r\n if (contentsActionEnableMode){\r\n this._contentsActionEnableMode = contentsActionEnableMode;\r\n }\r\n\r\n // Получить тексты всплывающих подсказок\r\n this._disabledHint = this._jObject.data('disabledhint');\r\n this._hint = this._jObject.data('hint');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: 'ToolBarButton',\r\n groupName: '',\r\n isSynthetic: false,\r\n _jGroup: null,\r\n _inlineEvent: '',\r\n _linkedAction: null,\r\n _enabledMode: null,\r\n _disabledHint: '',\r\n _hint: '',\r\n _enabledWhen: null,\r\n _contentsActionEnableMode: 0,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Изменяет размер кнопки.\r\n * Размер кнопки регулируется отображением и скрытием ее заголовка.\r\n *\r\n * @deprecated since 5.6. Используйте методы hideCaption и showCaption.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#convertTo\r\n * @param {BUTTON} buttonType Тип кнопки\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n * @since 5.0.0.4104\r\n */\r\n convertTo(buttonType) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return (buttonType === BUTTON.LARGE) ? this.showCaption() : this.hideCaption();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Скрывает заголовок кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#hideCaption\r\n * @since 5.6.0.1300\r\n */\r\n hideCaption() {\r\n if (this.isCaptionVisible()) {\r\n this._jObject.removeClass('toolbar_item').addClass('small_toolbar_item');\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Отображает заголовок кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#showCaption\r\n * @since 5.6.0.1300\r\n */\r\n showCaption() {\r\n if (!this.isCaptionVisible()) {\r\n this._jObject.removeClass('small_toolbar_item').addClass('toolbar_item');\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает имя прикладного действия, связанного с кнопкой на панели действий.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getLinkedAction\r\n * @return {string} Имя прикладного действия, если действие указано, иначе пустая строка.\r\n */\r\n getLinkedAction() {\r\n return this._linkedAction;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getEnabledMode\r\n\t* @return {ACTION_ENABLED_MODE} Режим доступности кнопки.\r\n */\r\n getEnabledMode() {\r\n return this._enabledMode;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки, если в области вложений выделен хотя бы один элемент.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnAttachnentSelected\r\n * @deprecated since 5.6. Use getIsEnabledOnAttachmentSelected instead.\r\n * @returns {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAttachnentSelected() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this.getIsEnabledOnAttachmentSelected();\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки, если в области вложений выделен хотя бы один элемент.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnAttachmentSelected\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAttachmentSelected() {\r\n if (this._enabledWhen) {\r\n return Boolean(this._enabledWhen & isEnabledOnAttachmentSelected);\r\n }\r\n return false;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки для состояния \"Прекращено\".\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnAborted\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAborted() {\r\n if (this._enabledWhen) {\r\n return Boolean(this._enabledWhen & isEnabledOnAborted);\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки для состояния \"Выполнено\".\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnDone\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnDone() {\r\n if (this._enabledWhen) {\r\n return Boolean(this._enabledWhen & isEnabledOnDone);\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки для состояния \"В работе\".\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnRunning\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnRunning() {\r\n if (this._enabledWhen) {\r\n return Boolean(this._enabledWhen & isEnabledOnRunning);\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того, что кнопка нажата.\r\n * Получает режим доступности кнопки только для выделенных записей.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledOnlyForSelected\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnlyForSelected() {\r\n return Boolean(this._contentsActionEnableMode & CONTENTS_ACTION_ENABLED_MODE.ENABLED_ONLY_FOR_SELECTED);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает режим доступности кнопки при множественном выборе.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getIsEnabledWhenMultiSelect\r\n * @return {boolean} True - кнопка доступна, иначе False.\r\n */\r\n getIsEnabledWhenMultiSelect() {\r\n return Boolean(this._contentsActionEnableMode & CONTENTS_ACTION_ENABLED_MODE.ENABLED_WHEN_MULTISELECT);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак того, что кнопка нажата.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#isSelected\r\n * @return {boolean} True, если кнопка нажата, иначе False.\r\n * @since 5.3.0.1104\r\n */\r\n isSelected() {\r\n return this._jObject.hasClass(\"selected\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак кнопки маленького размера.\r\n *\r\n * @deprecated since 5.6. Используйте метод isCaptionVisible.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#isSmall\r\n * @returns {boolean} TRUE, если кнопка уменьшена (у кнопки не отображается название), иначе - FALSE.\r\n * @since 5.0.0.4104\r\n */\r\n isSmall() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return !this.isCaptionVisible();\r\n },\r\n\r\n /**\r\n * Признак видимости названия кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#isCaptionVisible\r\n * @returns {boolean} TRUE, если у кнопки отображается название, иначе - FALSE.\r\n * @since 5.6.0.9072\r\n */\r\n isCaptionVisible() {\r\n return !this._jObject.hasClass('small_toolbar_item');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает родительскую группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#getParentGroup\r\n * @returns {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа WebAccess.components.wrappers.toolBar.ToolBarGroup.\r\n * @since 5.6.0.1300\r\n */\r\n getParentGroup() {\r\n this.groupName = this._jObject.parents(groupSelector).attr(\"name\");\r\n return global.current.toolBar.groups[this.groupName];\r\n },\r\n\r\n /**\r\n * Получает родительскую группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#group\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа WebAccess.components.wrappers.toolBar.ToolBarGroup.\r\n * @deprecated since 5.6. Используйте метод getParentGroup.\r\n */\r\n group() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this.getParentGroup();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n click(opt_callback) {\r\n if ($.isFunction(opt_callback)) {\r\n this.unbind(\"click\");\r\n };\r\n this._super(opt_callback);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n bind(event, callback) {\r\n this._super(event, callback);\r\n if (this.isSynthetic && event == \"click\") { //Убираем алерт с подсказкой\r\n this._jObject.removeAttr(\"onclick\"); // Здесь именно так \r\n this._jObject.prop(\"onclick\", null); // именно две строки\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку недоступной.\r\n * \r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#disable\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n disable() {\r\n this._super();\r\n this._setActualHint();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку доступной.\r\n * \r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#enable\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n enable() {\r\n this._super();\r\n this._setActualHint();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает текст всплывающей подсказки.\r\n * \r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#setHints\r\n * @param {string} hint Текст всплывающей подсказки.\r\n * @param {string} disabledHint Текст всплывающей подсказки для недоступной кнопки.\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n setHints(hint, disabledHint) {\r\n var me = this;\r\n me._hint = hint;\r\n me._disabledHint = disabledHint;\r\n me._setActualHint();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить подсказку на основе состояния действия и значений свойств.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#_setActualHint\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton}\r\n */\r\n _setActualHint() {\r\n var me = this;\r\n if (!me.isEnabled() && me._disabledHint) {\r\n me.setTooltip(me._disabledHint);\r\n } else {\r\n if (me._hint) {\r\n me.setTooltip(me._hint);\r\n } else {\r\n me.setTooltip(me.getLabel());\r\n }\r\n }\r\n }\r\n });\r\n\r\n global.components.wrappers.toolBar.ToolBarButton = ToolBarButton;\r\n})(window.WebAccess);","'use strict';\r\n\r\n(function(global) {\r\n /**\r\n * Класс кнопки React-панели действий.\r\n *\r\n * @memberOf WebAccess.components.wrappers.toolBar\r\n * @class ReactToolBarButton\r\n * @extends WebAccess.components.wrappers.BaseReactPageElement\r\n * @since 5.6.0.1300\r\n */\r\n var ReactToolBarButton = global.components.wrappers.BaseReactPageElement.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#init\r\n * @param {object} buttonModel Модель React-элемента страницы.\r\n * @param {string} parentGroupName Имя родительской группы кнопок.\r\n * @fires BaseObject.EVENTS#CLASS_INIT\r\n */\r\n init: function (buttonModel, parentGroupName) {\r\n this._super(buttonModel);\r\n\r\n this.groupName = parentGroupName;\r\n\r\n // Установить доступность действий в соответствии с режимом доступности ЗЗУ\r\n if(this._model.enabledWhen) {\r\n this._isEnabledOnAttachmentSelected =\r\n Boolean(this._model.enabledWhen & JOB_ACTION_ENABLED_WHEN.IS_ENABLED_ON_ATTACHMENT_SELECTED);\r\n this._isEnabledOnAborted = Boolean(this._model.enabledWhen & JOB_ACTION_ENABLED_WHEN.IS_ENABLED_ON_ABORTED);\r\n this._isEnabledOnDone = Boolean(this._model.enabledWhen & JOB_ACTION_ENABLED_WHEN.IS_ENABLED_ON_DONE);\r\n this._isEnabledOnRunning = Boolean(this._model.enabledWhen & JOB_ACTION_ENABLED_WHEN.IS_ENABLED_ON_RUNNING);\r\n }\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property BaseReactPageElement#className\r\n * @override\r\n * @see BaseReactPageElement#className\r\n */\r\n className: 'ReactToolBarButton',\r\n\r\n /**\r\n * Имя родительской группы, к которой принадлежит кнопка на панели действий.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarButton#groupName\r\n */\r\n groupName: '',\r\n\r\n /**\r\n * Признак доступности действия, если в области вложений выделен хотя бы один элемент.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarButton#_isEnabledOnAttachmentSelected\r\n */\r\n _isEnabledOnAttachmentSelected: false,\r\n\r\n /**\r\n * Признак доступности действия, если ЗЗУ прекращено.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarButton#_isEnabledOnAborted\r\n */\r\n _isEnabledOnAborted: true,\r\n\r\n /**\r\n * Признак доступности действия, если ЗЗУ выполнено.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarButton#_isEnabledOnDone\r\n */\r\n _isEnabledOnDone: true,\r\n\r\n /**\r\n * Признак доступности действия, если ЗЗУ в работе.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarButton#_isEnabledOnRunning\r\n */\r\n _isEnabledOnRunning: true,\r\n\r\n /**\r\n * Форматирование модели.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#_formatModel\r\n */\r\n _formatModel: function () {\r\n this._super();\r\n\r\n // Для того, чтобы при установке tooltip'ов не изменялся текст кнопки.\r\n this._model['caption'] = this._model['caption'] || this._model['hint'];\r\n },\r\n\r\n /**\r\n * Установить подсказку на основе состояния действия и значений свойств.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarButton#_setActualHint\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton}\r\n */\r\n _setActualHint: function() {\r\n var me = this;\r\n if (!me.isEnabled() && me._model.disabledHint) {\r\n me.setTooltip(me._model.disabledHint);\r\n } else {\r\n if (me._model.hint) {\r\n me.setTooltip(me._model.hint);\r\n } else {\r\n me.setTooltip(me.getLabel());\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Изменить размер кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#convertTo\r\n * @param {BUTTON} buttonSize Размер кнопки.\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBar.EVENT.CHANGE\r\n * @deprecated since 5.6. Use hideCaption or showCaption instead.\r\n */\r\n convertTo(buttonSize) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n\r\n if(buttonSize === BUTTON.LARGE) {\r\n this.showCaption();\r\n } else {\r\n this.hideCaption();\r\n }\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBar.EVENT.CHANGE);\r\n \r\n return this;\r\n },\r\n\r\n /**\r\n * Получает наименование прикладного действия, связанного с кнопкой на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getLinkedAction\r\n * @returns {string} Имя прикладного действия, если действие указано, иначе пустая строка.\r\n */\r\n getLinkedAction: function () {\r\n return this._model.linkedAction;\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getEnabledMode\r\n * @returns {ACTION_ENABLED_MODE} Режим доступности кнопки.\r\n */\r\n getEnabledMode() {\r\n return this._model.enabledMode;\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки при выборе вложений.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getIsEnabledOnAttachnentSelected\r\n * @deprecated since 5.6. Use getIsEnabledOnAttachmentSelected instead.\r\n * @returns {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAttachnentSelected() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this.getIsEnabledOnAttachmentSelected();\r\n },\r\n\r\n\r\n /**\r\n * Получить режим доступности кнопки, если в области вложений выделен хотя бы один элемент.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getIsEnabledOnAttachmentSelected\r\n * @returns {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAttachmentSelected() {\r\n return this._isEnabledOnAttachmentSelected;\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки для прекращенных задач и заданий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getIsEnabledOnAborted\r\n * @returns {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnAborted() {\r\n return this._isEnabledOnAborted;\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки для выполненных задач и заданий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getIsEnabledOnDone\r\n * @return {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnDone() {\r\n return this._isEnabledOnDone;\r\n },\r\n\r\n /**\r\n * Получает режим доступности кнопки для задач и заданий в состоянии \"В работе\".\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getIsEnabledOnRunning\r\n * @return {boolean} True - если кнопка доступна, иначе False.\r\n */\r\n getIsEnabledOnRunning() {\r\n return this._isEnabledOnRunning;\r\n },\r\n\r\n /**\r\n * Получает родительскую группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#group\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBarGroup.\r\n * @deprecated since 5.6. Use getParentGroup instead.\r\n * @use WebAccess.components.wrappers.toolBar.ReactToolBarButton.getParentGroup\r\n */\r\n group() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this.getParentGroup();\r\n },\r\n\r\n /**\r\n * Получает родительскую группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#getParentGroup\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBarGroup.\r\n */\r\n getParentGroup: function () {\r\n return global.current.toolBar.groups[this.groupName];\r\n },\r\n\r\n /**\r\n * Скрывает заголовок кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#hideCaption\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBarButton.EVENT.CHANGE_CAPTION_VISIBILITY\r\n */\r\n hideCaption: function () {\r\n this._model.isCaptionVisible = false;\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBarButton.EVENT.CHANGE_CAPTION_VISIBILITY);\r\n return this;\r\n },\r\n\r\n /**\r\n * Признак отображения заголовка кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#isCaptionVisible\r\n * @returns {boolean} True, если заголовок отображается, иначе False.\r\n */\r\n isCaptionVisible: function () {\r\n return this._model.isCaptionVisible;\r\n },\r\n\r\n /**\r\n * Признак кнопки маленького размера.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#isSmall\r\n * @returns {boolean} True, если кнопка маленького размера, иначе False.\r\n * @deprecated since 5.6. Use isCaptionVisible instead.\r\n */\r\n isSmall() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return !this._model.isCaptionVisible;\r\n },\r\n\r\n /**\r\n * Устанавливает текст всплывающей подсказки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#setHints\r\n * @param {string} hint Текст всплывающей подсказки.\r\n * @param {string} disabledHint Текст всплывающей подсказки при недоступной кнопке.\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarButton} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBarButton.\r\n */\r\n setHints: function (hint, disabledHint) {\r\n this._model.hint = hint;\r\n this._model.disabledHint = disabledHint;\r\n this._setActualHint();\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBar.EVENT.CHANGE);\r\n },\r\n\r\n /**\r\n * Отображает заголовок кнопки.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarButton#showCaption\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBarButton.EVENT.CHANGE_CAPTION_VISIBILITY\r\n */\r\n showCaption: function () {\r\n this._model.isCaptionVisible = true;\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBarButton.EVENT.CHANGE_CAPTION_VISIBILITY);\r\n return this;\r\n }\r\n }, {\r\n EVENT: {\r\n // Событие, срабатывающее при изменении видимости заголовка кнопки.\r\n CHANGE_CAPTION_VISIBILITY: 'changeCaptionVisibility'\r\n }\r\n });\r\n\r\n global.components.wrappers.toolBar.ReactToolBarButton = ReactToolBarButton;\r\n})(window.WebAccess);","'use strict';\r\n\r\n/**\r\n * Режим сжатия группы кнопок.\r\n * @since 5.0.0.4104\r\n * @readonly\r\n * @enum {string} GROUP_FOLD_MODE\r\n * @example\r\n * //В группе кнопок, именуемой ATTACHMENTS, убрать подписи у маленьких кнопок.\r\n * WebAccess.current.toolBar.groups.ATTACHMENTS.compress(GROUP_FOLD_MODE.SHRINK_SMALL_BUTTONS);\r\n */\r\nvar GROUP_FOLD_MODE = {\r\n /** Убрать подписи у маленьких кнопок */\r\n SHRINK_SMALL_BUTTONS: 0,\r\n /** Преобразовать большие кнопки в столбец из маленьких */\r\n CONVERT_LARGE_BUTTONS: 1,\r\n /** Свернуть группу, состоящую из маленьких кнопок, в одну большую кнопку */\r\n COLLAPSE: 2,\r\n /** Свернуть группу кнопок по приоритету: CONVERT_LARGE_BUTTONS > SHRINK_SMALL_BUTTONS > COLLAPSE */\r\n AUTO: 3\r\n};\r\n\r\n// Время ожидания скрытия группы на ленте тулбара.\r\nconst autoHideTimeout = 500;\r\n\r\n/**\r\n * Группа панели инструментов.\r\n *\r\n * @class WebAccess.components.wrappers.toolBar.ToolBarGroup\r\n * @extends WebAccess.components.wrappers.BasePageElement\r\n * @property {string} name Имя группы\r\n * @property {string} priority Приоритет сворачивания группы\r\n * @property {string} selector Путь в DOM-иерархии к объекту группы, например div.content#container\r\n * @param {string} itemSelector Существующий элемент страницы\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarGroup}\r\n */\r\n\r\n(function (global) {\r\n var toolBarContainerSelector = '#toolbar_container';\r\n var groupSelector = 'div.toolbar_group';\r\n var groupHeaderSelector = 'div.toolbar_group_header, div.toolbar-more-button__header';\r\n const buttonSelector = 'div.toolbar_button';\r\n var smallButtonSelector = 'div.small_toolbar_item';\r\n var jToolBarContainer = $(toolBarContainerSelector);\r\n var toolBarBottomBorderClass = 'toolbar_bottom_border';\r\n var buttonArrowSelector = '.toolbar-item__arrow';\r\n\r\n\r\n global.index = 100;\r\n\r\n /**\r\n * Группа кнопок на тулбаре.\r\n *\r\n * @extends WebAccess.components.wrappers.BasePageElement\r\n */\r\n var ToolBarGroup = global.components.wrappers.BasePageElement.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#init\r\n * @param {object} itemSelector - jQuery-селектор объекта для группы.\r\n * @override\r\n */\r\n init: function (itemSelector) {\r\n this._super(itemSelector);\r\n this.selector = format(this._byNameSelectorTemplate, groupSelector, this.name);\r\n this._index = global.index += 1;\r\n this.priority = this._jObject.attr('priority');\r\n\r\n if (this._jObject.attr('iscollapsed') === 'True') {\r\n this._isCollapsed = this._isCollapsedOnExtension = true;\r\n this._bindHeaderClick();\r\n }\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ToolBarGroup#className\r\n * @override\r\n */\r\n className: 'ToolBarGroup',\r\n\r\n /**\r\n * Признак свернутой группы.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ToolBarGroup#_isCollapsed\r\n */\r\n _isCollapsed: false,\r\n /**\r\n * Признак группы, свернутой в веб-модуле.\r\n * Такие группы не должны разворачиваться.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ToolBarGroup#_isCollapsedOnExtension\r\n */\r\n _isCollapsedOnExtension: false,\r\n\r\n /**\r\n * Приоритет группы кнопок на ленте.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.BasePageElement#priority\r\n */\r\n priority: null,\r\n\r\n /**\r\n * jQuery-селектор элемента страницы.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.BasePageElement#selector\r\n * @deprecated since 5.6.\r\n */\r\n selector: '',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** @private */\r\n _index: 0,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить обработчик нажатия на заголовок группы.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#_bindHeaderClick\r\n */\r\n _bindHeaderClick: function () {\r\n var me = this;\r\n var headerInlineBlock = 'inline-block';\r\n var addedGroupSelector = 'div[id^=\\'addedDiv\\']';\r\n var tbgroup_header = this._jObject.children(groupHeaderSelector);\r\n tbgroup_header.css('display', headerInlineBlock).unbind('click').bind('click', function (evt) {\r\n evt.stopPropagation();\r\n var elem = $(this).nextAll(addedGroupSelector);\r\n if (elem.css('display') !== 'none') {\r\n elem.hide();\r\n } else {\r\n var docWidth = $(document).width();\r\n $(addedGroupSelector).hide();\r\n elem.show();\r\n var jHiddenDiv = me._jObject.find('.addedHiddenDiv:visible').css('left', '');\r\n var divWidth = jHiddenDiv.width();\r\n if (divWidth > (docWidth - jHiddenDiv.position().left)) jHiddenDiv.css('left', docWidth - divWidth);\r\n }\r\n });\r\n\r\n tbgroup_header.nextAll(buttonSelector).hover(function () {\r\n $(this).addClass('hover');\r\n }, function () {\r\n $(this).removeClass('hover');\r\n });\r\n\r\n me._autoHideGroup($('.addedHiddenDiv'));\r\n },\r\n\r\n /**\r\n * Создать кнопку в текущей группе.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#createButton\r\n * @param {string} buttonName Имя создаваемой кнопки.\r\n * @param {BUTTON} [opt_smallSized] Отображение или скрытие заголовка кнопки.\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n createButton: function (buttonName, opt_smallSized) {\r\n return global.current.toolBar.buttons.create(this.name, buttonName, opt_smallSized);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сворачивание группы кнопок\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#collapse\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarGroup}\r\n */\r\n collapse: function () {\r\n var me = this;\r\n if (!me.isCollapsed()) {\r\n var addedGroupSelector = 'div[id^=\\'addedDiv\\']';\r\n\r\n jToolBarContainer.find(addedGroupSelector + ':visible').hide();\r\n const jVisibleButtons = me._jObject.children(buttonSelector).filter(':visible');\r\n const jButtonArrows = jVisibleButtons.find(buttonArrowSelector);\r\n //Нельзя сворачивать группы из одной кнопки. А также нельзя скрывать группы с кнопками со стрелками, чтобы не получилось многоуровневое меню.\r\n if (jVisibleButtons.length > 1 && !jButtonArrows.length) {\r\n me._jObject.append(format(CT.toolBar.groupCollapsed, me._jObject.css('left')));\r\n //Сначала добавляем div выше, потом только биндить клик\r\n me._bindHeaderClick();\r\n\r\n var jAddedDiv = me._jObject.find('#addedDiv');\r\n jVisibleButtons.appendTo(jAddedDiv);\r\n fixSvg(jAddedDiv[0]);\r\n\r\n me._isCollapsed = true;\r\n me.fire(WebAccess.components.wrappers.toolBar.ToolBarGroup.EVENTS.COLLAPSE);\r\n\r\n jVisibleButtons.hover(function () {\r\n $(me).addClass('hover');\r\n }, function () {\r\n $(me).removeClass('hover');\r\n });\r\n } else {\r\n return me;\r\n }\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Автоскрытие группы, когда мышь находится вне её.\r\n *\r\n * @private\r\n * @since 5.0.0.4212\r\n */\r\n _autoHideGroup(jGroup) {\r\n let autohide;\r\n jGroup\r\n .off('mouseenter.collapse')\r\n .off('mouseleave.collapse')\r\n .on('mouseenter.collapse', () => {\r\n if (autohide) {\r\n clearTimeout(autohide);\r\n }\r\n })\r\n .on('mouseleave.collapse', () => {\r\n autohide = setTimeout(() => {\r\n jGroup.hide();\r\n }, autoHideTimeout);\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Развернуть кнопки группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#expand\r\n * @returns {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа ToolBarGroup.\r\n */\r\n expand: function () {\r\n if (this.isCollapsed()) {\r\n const jAddedDiv = this._jObject.find('#addedDiv');\r\n let items = jAddedDiv.children(buttonSelector);\r\n items.appendTo(this._jObject);\r\n fixSvg(this._jObject[0]);\r\n jAddedDiv.remove(); //удалять надо после вставки в другое место иначе теряются обработчики событий.\r\n\r\n this._jObject.children('.toolbar_group_header').css('display', 'none');\r\n\r\n setRealHeightAndWidth();\r\n var jSmallItems = items.find('.small_toolbar_item');\r\n items.add(jSmallItems).hover(function () {\r\n if (!$(this).hasClass('disabled')) {\r\n $(this).addClass('hover');\r\n }\r\n }, function () {\r\n if (!$(this).hasClass('disabled')) {\r\n $(this).removeClass('hover');\r\n }\r\n });\r\n this._isCollapsed = false;\r\n this.fire(WebAccess.components.wrappers.toolBar.ToolBarGroup.EVENTS.EXPAND);\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак свернутой группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#isCollapsed\r\n * @return {boolean} True, если группа свернута, иначе False.\r\n */\r\n isCollapsed: function () {\r\n return this._isCollapsed; //this._jObject.children(groupHeaderSelector).is(\":visible\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Имитирует щелчок мыши на кнопке свернутой группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#click\r\n * @param {function} opt_callback Функция, которая будет вызвана по щелчку мыши.\r\n * @throws ERR_CANT_CLICK_ON_EXPANDED_GROUP – метод click поддерживается только для свернутых групп.\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа ToolBarGroup.\r\n */\r\n click: function (opt_callback) {\r\n var jHeader = this._jObject.children(groupHeaderSelector);\r\n\r\n if (this.isCollapsed()) {\r\n if ($.isFunction(opt_callback)) {\r\n this._disableClickHandler(jHeader);\r\n this.bind('click', opt_callback);\r\n this.jHeader.bind('click', function () {\r\n instance.fire('click');\r\n });\r\n } else jHeader.click();\r\n } else global.raise('ERR_CANT_CLICK_ON_EXPANDED_GROUP');\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить список кнопок текущей группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#getButtons\r\n * @return {WebAccess.current.toolBar.buttons} Список объектов типа ToolBarButton, вложенных в эту группу.\r\n */\r\n getButtons: function () {\r\n var me = this;\r\n var buttons = global.current.toolBar.buttons.toArray();\r\n var filteredButtons = {};\r\n var filtered = _(buttons).filter(function (button) {\r\n return button.groupName === me.name;\r\n });\r\n for (var buttonName in filtered) {\r\n filteredButtons[filtered[buttonName].name] = filtered[buttonName];\r\n }\r\n return new WA.Collection(filteredButtons);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Добавить нижнюю границу к текущей группе.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#addBottomBorder\r\n * @param {string} color CSS-класс цвета нижней границы\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа ToolBarGroup.\r\n * @since 5.0.0.4200\r\n * @deprecated since 5.6.\r\n */\r\n addBottomBorder(color) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n var me = this;\r\n var jBottomBorder = me._jObject.children('.' + toolBarBottomBorderClass);\r\n if (!jBottomBorder.length) {\r\n // Дополнительный div нужен что бы сделать ему position:relative, \r\n // т.к. у toolbar_group этого сделать нельзя, потому что ломается выпадающий список сгруппированных кнопок.\r\n // А вообще position:relative нужен что бы в IE7 нормально заработало.\r\n jBottomBorder = $('
    ');\r\n me._jObject.prepend(jBottomBorder);\r\n }\r\n jBottomBorder.removeClass().addClass(toolBarBottomBorderClass + ' ' + color);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n // Deprecated методы\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить ширину группы.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#getWidth\r\n * @return {number} Ширина группы.\r\n * @since 5.0.0.4104\r\n */\r\n getWidth() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this._jObject.width();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пошагово сжать группу кнопок.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#fold\r\n * @returns {boolean} Результат сжатия - FALSE.\r\n * @since 5.0.0.4104\r\n */\r\n fold() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return false;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Пошагово восстановить группы кнопок.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#unfold\r\n * @returns {boolean} Результат восстановления - FALSE.\r\n * @since 5.0.0.4104\r\n */\r\n unfold() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return false;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сжать группу в указанный размер.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#fitToWidth\r\n * @param {number} width Ширина, в которую необходимо вписать группу.\r\n * @returns {boolean} TRUE, если группа вмещается в указанную ширину, иначе - FALSE.\r\n * @since 5.0.0.4104\r\n */\r\n fitToWidth(width) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this.getWidth() <= width;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть следующий за группой разделитель.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#hideNextSeparator\r\n * @returns {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа ToolBarGroup.\r\n * @since 5.0.0.4212\r\n */\r\n hideNextSeparator() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Показать следующий за группой разделитель.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.toolBar.ToolBarGroup#showNextSeparator\r\n * @returns {WebAccess.components.wrappers.toolBar.ToolBarGroup} Объект типа ToolBarGroup.\r\n * @since 5.0.0.4212\r\n */\r\n showNextSeparator() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n }, {\r\n EVENTS: {\r\n CHANGE: 'change',\r\n COLLAPSE: 'collapse',\r\n EXPAND: 'expand'\r\n }\r\n });\r\n\r\n global.components.wrappers.toolBar.ToolBarGroup = ToolBarGroup;\r\n})(window.WebAccess);","'use strict';\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Класс группы кнопок React-панели действий.\r\n * @memberOf WebAccess.components.wrappers.toolBar\r\n * @class ReactToolBarGroup\r\n * @extends BaseReactPageElement\r\n * @since 5.6.0.1300\r\n */\r\n var ReactToolBarGroup = global.components.wrappers.BaseReactPageElement.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#init\r\n * @param {object} model Модель группы кнопок на панели действий.\r\n * @override\r\n */\r\n init(model) {\r\n let extendedModel = this._extendModel(model);\r\n this._super(extendedModel);\r\n this.priority = this._model.priority;\r\n },\r\n\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBarGroup#className\r\n * @override\r\n */\r\n className: 'ReactToolBarGroup',\r\n\r\n /**\r\n * Приоритет группы кнопок на панели действий.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.ReactToolBarGroup#priority\r\n */\r\n priority: null,\r\n\r\n /**\r\n * Расширить модель группы кнопок на панели действий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#_extendModel\r\n * @param {object} model Модель группы кнопок на панели действий.\r\n * @returns {object} Расширенная модель группы кнопок на панели действий.\r\n */\r\n _extendModel(model) {\r\n model.isCollapsed = model.isCollapsed || false;\r\n return model;\r\n },\r\n\r\n /**\r\n * Создает кнопку в текущей группе кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#createButton\r\n * @param {string} buttonName Имя создаваемой кнопки.\r\n * @param {BUTTON} [opt_smallSized] Отображение или скрытие заголовка кнопки.\r\n * @return {object} Объект типа ReactToolBarButton.\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT#CHANGE\r\n */\r\n createButton(buttonName, opt_smallSized) {\r\n let buttonLabel = L('NEW_BUTTON');\r\n let newButtonModel = {\r\n icon: 'Doc/doc_32.png',\r\n isCaptionVisible: !opt_smallSized,\r\n name: buttonName,\r\n caption: buttonLabel,\r\n tooltip: buttonLabel,\r\n isVisible: true,\r\n isEnabled: true,\r\n };\r\n this._model.buttons.push(newButtonModel);\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT.CHANGE);\r\n return new global.components.wrappers.toolBar.ReactToolBarButton(newButtonModel);\r\n },\r\n\r\n /**\r\n * Сворачивает группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#collapse\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT#COLLAPSE\r\n */\r\n collapse() {\r\n this._model.isCollapsed = true;\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT.COLLAPSE);\r\n return this;\r\n },\r\n\r\n /**\r\n * Пошагово сжимает группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#fold\r\n * @param {GROUP_FOLD_MODE} foldMode Режим сжатия.\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @deprecated since 5.6.\r\n */\r\n fold(foldMode) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Пошагово восстанавливает группу кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#unfold\r\n * @param {GROUP_FOLD_MODE} foldMode Режим сжатия.\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @deprecated since 5.6.\r\n */\r\n unfold(foldMode) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Сжимает группу в указанный размер.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#fitToWidth\r\n * @param {integer} width Ширина, в которую необходимо вписать группу.\r\n * @return {boolean} Результат сжатия. True – группы вместилась, иначе False.\r\n * @deprecated since 5.6.\r\n */\r\n fitToWidth(width) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return true;\r\n },\r\n\r\n /**\r\n * Разворачивает кнопки группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#expand\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT#EXPAND\r\n */\r\n expand() {\r\n this._model.isCollapsed = false;\r\n this.fire(WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT.EXPAND);\r\n return this;\r\n },\r\n\r\n /**\r\n * Признак свернутой группы кнопок.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#isCollapsed\r\n * @return {boolean} True, если группа свернута, иначе False.\r\n */\r\n isCollapsed() {\r\n return this._model.isCollapsed;\r\n },\r\n\r\n /**\r\n * Получает ширину группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#getWidth\r\n * @return {number} Всегда 0, так как компонента не знает ничего о представлении.\r\n * @deprecated since 5.6.\r\n */\r\n getWidth() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return 0;\r\n },\r\n\r\n /**\r\n * Получает список кнопок текущей группы.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#getButtons\r\n * @return {WebAccess.components.wrappers.toolBar.Buttons} Список объектов типа ReactToolBarButton, вложенных в эту группу.\r\n */\r\n getButtons() {\r\n let toolbarButtons = global.current.toolBar.buttons.toArray();\r\n let filteredButtons = toolbarButtons.filter((button) => {\r\n return button.groupName === this._model.name;\r\n });\r\n return new WA.Collection(filteredButtons);\r\n },\r\n\r\n /**\r\n * Добавляет нижнюю границу к текущей группе.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#addBottomBorder\r\n * @param {string} color CSS-класс цвета нижней границы.\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @deprecated since 5.6.\r\n */\r\n addBottomBorder(color) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Скрывает следующий за группой разделитель.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#hideNextSeparator\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @deprecated since 5.6.\r\n */\r\n hideNextSeparator() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Показывает следующий за группой разделитель.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBarGroup#showNextSeparator\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n * @deprecated since 5.6.\r\n */\r\n showNextSeparator() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return true;\r\n }\r\n }, {\r\n EVENT: {\r\n // Событие, срабатывающее при сворачивании группы.\r\n COLLAPSE: 'toolbarGroupCollapse',\r\n // Событие, срабатывающее при разворачивании группы.\r\n EXPAND: 'toolbarGroupExpand',\r\n // Событие, срабатывающее при изменении модели группы.\r\n CHANGE: 'toolbarGroupChange'\r\n }\r\n });\r\n\r\n global.components.wrappers.toolBar.ReactToolBarGroup = ReactToolBarGroup;\r\n})(window.WebAccess);","'use strict';\r\n(function defButtonsCollection(global) {\r\n\r\n /**\r\n * Часто используемые селекторы\r\n */\r\n const buttonSelector = '.toolbar_button';\r\n const byNameSelectorTemplate = '{0}[name={1}]';\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Класс-обертка для коллекции кнопок\r\n * @class WebAccess.components.wrappers.toolBar.Buttons\r\n * @extends WebAccess.Collecton\r\n * @since 5.2.0.1600\r\n */\r\n var Buttons = global.Collection.extend({\r\n\r\n // Список действий и соответствующих им кнопок на ленте.\r\n _buttonsByActionName: {},\r\n\r\n // Список режимов доступности и соответствующих им действий.\r\n _buttonsByEnabledMode: {},\r\n\r\n // Список кнопок, состояние которых изменяется в зависимости от выделения вложений\r\n _buttonsEnabledOnAttachmentSelection: [],\r\n\r\n // Список кнопок, доступных при наличии выделенных записей\r\n _buttonsEnabledForMultiSelected: {},\r\n\r\n // Список кнопок, доступных только при выделенной 1 записи\r\n _buttonsEnabledOnlyForOneSelected: {},\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @param {array} elements Список кнопок.\r\n */\r\n init(elements) {\r\n var me = this;\r\n me._super(elements);\r\n\r\n // Сформировать списки\r\n me._arr.forEach(function (item) {\r\n // Действия и соответствующие им кнопки\r\n var linkedAction = item.getLinkedAction();\r\n var buttons = null;\r\n if (linkedAction) {\r\n buttons = me._buttonsByActionName[linkedAction];\r\n if (buttons) {\r\n buttons.push(item);\r\n } else {\r\n me._buttonsByActionName[linkedAction] = [item];\r\n }\r\n }\r\n\r\n // Режимы доступности и соответствующие им кнопки\r\n var enabledMode = item.getEnabledMode();\r\n if (enabledMode) {\r\n buttons = me._buttonsByEnabledMode[enabledMode];\r\n if (buttons) {\r\n buttons.push(item);\r\n } else {\r\n me._buttonsByEnabledMode[enabledMode] = [item];\r\n }\r\n }\r\n\r\n // Сформировать список кнопок, состояния которых изменяются в зависимости от выделения элементов\r\n if (item.getIsEnabledOnAttachnentSelected()) {\r\n me._buttonsEnabledOnAttachmentSelection.push(item);\r\n }\r\n\r\n // Сформировать список кнопок, состояния которых изменяются в зависимости от выделения элементов\r\n if (item.getIsEnabledOnlyForSelected() && item.groupName === \"TOOLBAR_CONTENTS_ACTIONS_GROUP\") {\r\n if (item.getIsEnabledWhenMultiSelect()) {\r\n me._buttonsEnabledForMultiSelected[item.name] = item;\r\n } else {\r\n me._buttonsEnabledOnlyForOneSelected[item.name] = item;\r\n }\r\n }\r\n });\r\n\r\n me._jToolBarConatainer = $('#toolbar_container');\r\n me._jSearchTarget = me._jToolBarConatainer.find(buttonSelector);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создать новую кнопку панели инструментов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#create\r\n * @param {string} toolGroupName Имя группы кнопок, в которую будет вложена кнопка.\r\n * @param {string | object} buttonName Имя создаваемой кнопки или объект {name: \"\", text:\"\", action:\"\", icon:\"\"}\r\n * @param {boolean} [isSmall = false] Является ли кнопка только иконкой (без названия).\r\n * @throws ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST – указанной группы кнопок не существует;\r\n * @throws ERR_BUTTON_NAME_IS_NOT_SPECIFIED – неверно указано имя кнопки;\r\n * @throws ERR_BUTTON_WITH_THE_SAME_NAME_ALREADY_EXIST – кнопка с указанным именем уже существует.\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n create(toolGroupName, buttonName, isSmall = false) {\r\n if (arguments.length < 2) {\r\n global.raise('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED');\r\n }\r\n\r\n const name = buttonName.name || buttonName;\r\n if (!name) {\r\n global.raise('ERR_BUTTON_NAME_IS_NOT_SPECIFIED_PROPERLY');\r\n }\r\n\r\n const text = buttonName.text || L('NEW_BUTTON');\r\n // Обработчик клика передаётся либо в свойстве action в виде строки, либо в jsaction в виде фукции\r\n const action = buttonName.action || (buttonName.jsaction ? '' : `alert(L('WRN_USE_CLICK_OR_BIND_METHODS_TO_SET_THE_ACTION'));`);\r\n const icon = buttonName.icon || 'document-20';\r\n const toolTip = buttonName.toolTip || text;\r\n const contentsActionEnabledMode = buttonName.contentsActionEnabledMode;\r\n\r\n const groupSelector = '.toolbar_group';\r\n const currentGroupSelector = format(byNameSelectorTemplate, groupSelector, toolGroupName);\r\n let jToolGroup = this._jToolBarConatainer.find(currentGroupSelector);\r\n if (!jToolGroup.length) {\r\n global.raise('ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST', toolGroupName);\r\n }\r\n\r\n const currentButtonSelector = format(byNameSelectorTemplate, buttonSelector, name);\r\n const jExistingButton = this._jToolBarConatainer.find(currentButtonSelector);\r\n if (jExistingButton.length > 0) {\r\n global.raise('ERR_BUTTON_WITH_THE_SAME_NAME_ALREADY_EXIST', name);\r\n }\r\n\r\n if (global.current.toolBar.groups[toolGroupName].isCollapsed()) {\r\n jToolGroup = jToolGroup.find('.addedHiddenDiv');\r\n }\r\n\r\n const buttonClass = `${isSmall ? 'small_' : ''}toolbar_item toolbar_button`;\r\n\r\n // Разные шаблоны для кнопки с svg-иконкой и, ради совместимости, для кнопки с png-иконкой. Начиная с v5.5\r\n let buttonTemplate = icon.endsWith('.png') ? CT.toolBar.button : CT.toolBar.buttonSvg;\r\n jToolGroup.append(format(buttonTemplate.replace(/> +<'), name, text, action, icon, buttonClass, toolTip));\r\n\r\n let button = new global.components.wrappers.toolBar.ToolBarButton(currentButtonSelector);\r\n button.isSynthetic = true;\r\n this.addElement(name, button);\r\n\r\n jExistingButton.hover(\r\n () => {\r\n $(this).addClass('hover');\r\n },\r\n () => {\r\n $(this).removeClass('hover');\r\n }\r\n );\r\n\r\n // jsaction не зависит от action, передаётся только как функция и используется только через bind\r\n if (buttonName.jsaction) {\r\n this[name].bind('click', buttonName.jsaction);\r\n }\r\n\r\n // Сформировать список кнопок, состояния которых изменяются в зависимости от выделения элементов\r\n if ((contentsActionEnabledMode & CONTENTS_ACTION_ENABLED_MODE.ENABLED_ONLY_FOR_SELECTED) && toolGroupName === 'TOOLBAR_CONTENTS_ACTIONS_GROUP') {\r\n if (contentsActionEnabledMode & CONTENTS_ACTION_ENABLED_MODE.ENABLED_WHEN_MULTISELECT) {\r\n this._buttonsEnabledForMultiSelected[name] = button;\r\n } else {\r\n this._buttonsEnabledOnlyForOneSelected[name] = button;\r\n }\r\n }\r\n\r\n return this[name];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить кнопку панели инструментов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#remove\r\n * @param {string} buttonName Имя создаваемой кнопки панели инструментов\r\n * @return {WebAccess.current.toolBar.buttons} Пространство имен WebAccess.components.wrappers.toolBar.Buttons#\r\n */\r\n remove(buttonName) {\r\n var me = this;\r\n delete me[buttonName];\r\n me._jToolBarConatainer.find(format(byNameSelectorTemplate, buttonSelector, buttonName)).remove();\r\n\r\n delete me._buttonsEnabledOnlyForOneSelected[buttonName];\r\n delete me._buttonsEnabledForMultiSelected[buttonName];\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить наличие кнопки панели инструментов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#isExist\r\n * @param {string} buttonName Имя кнопки панели инструментов\r\n * @return {boolean} True, если кнопка существует, иначе False.\r\n */\r\n isExist(buttonName) {\r\n var existingButton = $(format(byNameSelectorTemplate, buttonSelector, buttonName));\r\n return existingButton.length > 0;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список кнопок панели действий, которые зависят от указанного прикладного действия.\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#getButtonsByActionName\r\n\t* @param {string} actionName Наименование прикладного действия.\r\n * @returns {array} Массив кнопок панели действий, которые зависят от указанного прикладного действия.\r\n */\r\n getButtonsByActionName(actionName) {\r\n var buttons = this._buttonsByActionName[actionName.toLowerCase()];\r\n return buttons ? buttons : [];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список кнопок панели действий по режиму доступности действия.\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#getButtonsByEnabledMode\r\n\t* @param {ACTION_ENABLED_MODE} enabledMode Режим доступности действия.\r\n * @returns {array} Массив кнопок панели действий, для которых установлен указанный режим доступности действия.\r\n */\r\n getButtonsByEnabledMode(enabledMode) {\r\n var buttons = this._buttonsByEnabledMode[enabledMode];\r\n return buttons ? buttons : [];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список кнопок панели действий, доступных для выбранных вложений.\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#getButtonsEnabledOnAttachmentSelection\r\n\t * @returns {array} Массив кнопок панели действий, доступность которых изменяется в зависимости от выбора вложений.\r\n */\r\n getButtonsEnabledOnAttachmentSelection() {\r\n return this._buttonsEnabledOnAttachmentSelection;\r\n },\r\n\r\n /**\r\n * Получает список кнопок панели действий проводника, доступных только для одной выбранной записи.\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#getButtonsEnabledOnlyForOneSelected\r\n\t * @returns {array} Массив кнопок панели действий, доступность которых изменяется в зависимости от выбора одной записи.\r\n */\r\n getButtonsEnabledOnlyForOneSelected() {\r\n return this._buttonsEnabledOnlyForOneSelected;\r\n },\r\n\r\n /**\r\n * Получает список кнопок панели действий проводника, доступных при множественном выборе.\r\n * @method WebAccess.components.wrappers.toolBar.Buttons#getButtonsEnabledForMultiSelected\r\n\t * @returns {array} Массив кнопок панели действий, доступность которых изменяется в зависимости от выбора записей.\r\n */\r\n getButtonsEnabledForMultiSelected() {\r\n return this._buttonsEnabledForMultiSelected;\r\n }\r\n });\r\n\r\n global.components.wrappers.toolBar.Buttons = Buttons;\r\n\r\n})(window.WebAccess);\r\n","'use strict';\r\n(function defGroupsCollection(global) {\r\n\r\n /**\r\n * Часто используемые селекторы\r\n */\r\n const toolbarContentsSelector = '.toolbar_holder';\r\n const groupSelector = '.toolbar_group';\r\n const byNameSelectorTemplate = '{0}[name={1}]';\r\n //------------------------------------------------------------------------//\r\n\r\n /**\r\n * Обертка для коллекции кнопок\r\n * \r\n * @class WebAccess.components.wrappers.toolBar.Groups\r\n * @extends WebAccess.Collecton\r\n * @since 5.2.0.1600\r\n */\r\n var Groups = global.Collection.extend({\r\n\r\n /**\r\n * Создает новую группу кнопок панели инструментов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.Groups#create\r\n * @param {string | object} toolGroupName Имя группы кнопок или объект {name: \"\", label:\"\", action:\"\", icon:\"\"}\r\n * @param {string} toolGroupNameToAppendAfter Имя существующей группы кнопок на ленте, после которой вставится новая группа\r\n * @throws ERR_GROUP_NAME_IS_NOT_SPECIFIED_PROPERLY – Неверно указано имя группы.\r\n * @throws ERR_GROUP_WITH_THE_SAME_NAME_ALREADY_EXIST – Группа с указанным именем уже существует.\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton} Объект типа ToolBarButton.\r\n */\r\n create(toolGroupName, toolGroupNameToAppendAfter) {\r\n const jToolBar = $(toolbarContentsSelector);\r\n\r\n const name = toolGroupName.name || toolGroupName;\r\n if (!name) {\r\n global.raise('ERR_GROUP_NAME_IS_NOT_SPECIFIED_PROPERLY');\r\n }\r\n\r\n const label = toolGroupName.label || L('NEW_GROUP');\r\n const icon = toolGroupName.icon || 'document-20';\r\n\r\n const jExistingGroup = $(format(byNameSelectorTemplate, groupSelector, name));\r\n if (jExistingGroup.length) {\r\n global.raise('ERR_GROUP_WITH_THE_SAME_NAME_ALREADY_EXIST', name);\r\n }\r\n\r\n // Разные шаблоны для группы с svg-иконкой и, ради совместимости, для группы с png-иконкой. Начиная с v5.6\r\n const groupTemplate = icon.endsWith('.png') ? ControlTemplate.toolBar.group : ControlTemplate.toolBar.groupSvg;\r\n const groupHtml = format(groupTemplate, name, label, icon);\r\n if (typeof toolGroupNameToAppendAfter === 'string') {\r\n if (toolGroupNameToAppendAfter === '') {\r\n jToolBar.prepend(groupHtml);\r\n } else {\r\n const jBeforeGroup = jToolBar.find(`[name=\"${toolGroupNameToAppendAfter}\"]`);\r\n if (jBeforeGroup.length) {\r\n jBeforeGroup.after(groupHtml);\r\n } else {\r\n global.raise('ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST');\r\n }\r\n }\r\n } else {\r\n jToolBar.append(groupHtml);\r\n }\r\n this.addElement(name, new global.components.wrappers.toolBar.ToolBarGroup(format(byNameSelectorTemplate, groupSelector, name)));\r\n return this[name];\r\n },\r\n //----------------------------------------------------------------------//\r\n\r\n /**\r\n * Проверяет наличие группы кнопок панели инструментов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.Groups#isExist\r\n * @param {string} toolGroupName Имя группы кнопок\r\n * @return {boolean} True, если группа кнопок существует, иначе False.\r\n */\r\n isExist(toolGroupName) {\r\n const existingGroup = $(format(byNameSelectorTemplate, groupSelector, toolGroupName));\r\n return !!existingGroup.length;\r\n }\r\n //----------------------------------------------------------------------//\r\n });\r\n\r\n global.components.wrappers.toolBar.Groups = Groups;\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Закладка боковой панели.\r\n* \r\n* @class WebAccess.components.wrappers.sideBar.Tab\r\n* @extends BasePageElement\r\n* @property {string} name Имя закладки\r\n* @property {string} selector Путь в DOM-иерархии к объекту группы, например div.content#container\r\n* @property isSynthetic {boolean} Признак, указывающий на то, что закладка была создана средствами API\r\n* @param {string} itemSelector Cуществующий элемент страницы\r\n*/\r\n(function (global) {\r\n\r\n /**\r\n * Часто используемые селекторы\r\n */\r\n var sideBarConatainerSelector = \"#card_left_container\";\r\n var tabSelector = \"div.tab_item\";\r\n var cardFormTabTemplate = '#CardForm_Tab_{0}';\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Частоиспользуемые jQuery объекты\r\n */\r\n var jSideBarConatainer = $(sideBarConatainerSelector);\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n var Tab = WebAccess.components.wrappers.BasePageElement.extend({\r\n _current: null,\r\n dfmName: '',\r\n helpLink: '',\r\n\r\n init: function (itemSelector, opt_current) {\r\n this._current = opt_current.current;\r\n let jTab;\r\n\r\n if (this._current && this._current.sideBar) {\r\n jTab = this._current.sideBar._jSideBar.find(itemSelector);\r\n } else {\r\n jTab = $(itemSelector);\r\n }\r\n\r\n this._jObject = jTab;\r\n this._super(jTab);\r\n this.selector = format(this._byNameSelectorTemplate, tabSelector, this.name);\r\n this.dfmName = jTab.data('name');\r\n this.helpLink = jTab.data('help-link') || '';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"Tab\",\r\n isSynthetic: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Заполнение закладки произвольным контентом\r\n * \r\n * @method WebAccess.current.sideBar.tabs.tab#setHtml\r\n * @param {string} html - текст html разметки\r\n * @return {Tab}\r\n */\r\n setHtml: function (html) {\r\n if (global.getLocation() != \"explorer\") {\r\n if (this._jObject.hasClass(\"inline_tab\") && !this.isSynthetic) {\r\n if (this.name == \"Card\") {\r\n $(\"#CardForm_Tab_Card\").html(html);\r\n } else {\r\n var id = this._jObject.attr(\"id\");\r\n var num = id.substr(id.length - 1);\r\n $(\"#CardForm_Tab_\" + num).html(html);\r\n }\r\n } else {\r\n $(format(cardFormTabTemplate, this.name)).html(html);\r\n };\r\n } else {\r\n if (this._current && this._current.className === 'Current') { //Все исключительные ситуации ниже для совместимости и равнозначности всех закладок.\r\n switch (this.name) {\r\n case \"FldTree\":\r\n $(\"#ctl00_LeftContentPlaceHolder_TreeDiv\").html(html);\r\n break;\r\n default:\r\n $(\"#Search\").children(\"#\" + this.name).html(html);\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n click: function (opt_callback) {\r\n if ($.isFunction(opt_callback)) {\r\n this.unbind(\"click\");\r\n };\r\n this._super(opt_callback);\r\n },\r\n\r\n /**\r\n * Скрытие закладки\r\n * \r\n * @method WebAccess.current.sideBar.tabs.tab#setHtml\r\n * @return {Tab}\r\n */\r\n hide: function () {\r\n this._super();\r\n if (this._jObject.hasClass(\"last\")) this._jObject.removeClass(\"last\").prev(\"div\").addClass(\"last\");\r\n return this;\r\n },\r\n\r\n /** \r\n * Показ закладки\r\n * \r\n * @method WebAccess.current.sideBar.tabs.tab#show\r\n * @return {Tab}\r\n */\r\n show: function () {\r\n this._super();\r\n if (this._jObject.prev().hasClass(\"last\")) {\r\n this._jObject.addClass(\"last\").prev(\"div\").removeClass(\"last\");\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Делает закладку доступной для изменения.\r\n * \r\n * @method WebAccess.current.sideBar.tabs.tab#enable\r\n * @return {Tab} Объект типа Tab.\r\n */\r\n enable: function () {\r\n var me = this;\r\n me._super();\r\n // В карточке ЗЗУ точно не надо ничего байндить. У других объектов - может быть и надо, не проверял.\r\n const isNotBindedCard = [\r\n OBJECT_TYPE.EDOCUMENT,\r\n OBJECT_TYPE.JOB,\r\n OBJECT_TYPE.TASK,\r\n ].includes(WA.CR.Type);\r\n if (!me.isSynthetic && !isNotBindedCard) {\r\n me._jObject.bind(\"click\", function () {\r\n me._current.sideBar.tabs._defaultClickHandler(me, me.name, me.selector);\r\n });\r\n }\r\n return me;\r\n },\r\n\r\n /** \r\n * Возвращает признак видимости закладки.\r\n * \r\n * @method WebAccess.current.sideBar.tabs.tab#isVisible\r\n * @return {boolean} True - закладка отображается, False - закладка скрыта.\r\n */\r\n isVisible: function () {\r\n return this._jObject.is(':visible');\r\n }\r\n\r\n });\r\n\r\n global.components.wrappers.sideBar.Tab = Tab;\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Класс-обертка для коллекции закладок\r\n * @class WebAccess.components.wrappers.sideBar.Tabs\r\n * @extends WebAccess.Collecton\r\n * @since 5.2.0.1600 \r\n */\r\n var Tabs = global.Collection.extend({\r\n _tabSelector: 'div.tab_item',\r\n _byNameSelectorTemplate: '{0}[name=\"{1}\"]',\r\n _cardFormTabTemplate: '#CardForm_Tab_{0}',\r\n _cardFormTabSelector: 'div.CardForm_Tab',\r\n _cssClass: 'tab_item',\r\n _noCardFormAtStartFound: false,\r\n _current: null,\r\n\r\n init: function (elements, sideBarConatainerSelector, opt_current) {\r\n var me = this;\r\n me._super(elements);\r\n me._current = opt_current;\r\n me._jSideBarConatainer = $(sideBarConatainerSelector);\r\n me._jPlaceHolder = me._jSideBarConatainer.find(\"span:first\");\r\n\r\n me._jCardForm = $(\".CardForm, .FakeCardForm\");\r\n me._jScroller = $(\"#scroller\");\r\n me._jAfterTabs = $(\".after_tabs\");\r\n me._jSideBar = $('#card_left_container');\r\n me._actualizeCurrentOnClick();\r\n\r\n // Подписываемся на изменение активной вкладки.\r\n if (me._current && me._current.sideBar) {\r\n var currentSidebar = me._current.sideBar;\r\n currentSidebar.bind(currentSidebar['class'].EVENT.AFTER_TAB_SWITCH, function () {\r\n me._updateCurrentSelectedTab();\r\n });\r\n }\r\n\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Слежение за тем, какая закладка текущая\r\n * @private\r\n */\r\n _actualizeCurrentOnClick: function () {\r\n var me = this;\r\n me._jSearchTarget = me._jSideBarConatainer.bind('click', function () {\r\n me._updateCurrentSelectedTab();\r\n });\r\n me._updateCurrentSelectedTab();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n /**\r\n * Слежение за тем, какая закладка текущая\r\n * @private\r\n */\r\n _updateCurrentSelectedTab: function () {\r\n var me = this;\r\n me._jSelectedTab = me._jSideBarConatainer.find(me._tabSelector + '.selected');\r\n if (!me._jSelectedTab.length)\r\n me._jSelectedTab = me._jSideBarConatainer.find(me._tabSelector + '.first');\r\n var name = me._jSelectedTab.attr('name') || me._jSelectedTab.data('name');\r\n me.current = me[name];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создать новую закладку боковой панели.\r\n * \r\n * @method WebAccess.components.wrappers.sideBar.Tabs#create\r\n * @param {string|object} tabName Имя закладки или объект \r\n * {name: \"\", label:\"\", action:\"\", icon:\"\"}\r\n * @throws ERR_TAB_NAME_IS_NOT_SPECIFIED_PROPERLY – неверно указанно имя закладки;\r\n * @throws ERR_TAB_WITH_THE_SAME_NAME_ALREADY_EXIST – закладка с указанным\r\n * именем уже существует.\r\n * @return {WebAccess.components.wrappers.sideBar.Tab} Объект типа Tab. \r\n */\r\n create: function (tabName) {\r\n var me = this;\r\n\r\n var name = \"\";\r\n var label = L(\"NEW_TAB\");\r\n var icon = \"Doc/doc_32.png\";\r\n var toolTip = label;\r\n\r\n if (typeof tabName == \"object\") {\r\n name = tabName.name || tabName.id;\r\n label = tabName.label || tabName.text;\r\n icon = tabName.icon || icon;\r\n toolTip = tabName.toolTip || tabName.tooltip;\r\n } else if (typeof tabName == \"string\") {\r\n name = tabName;\r\n } else global.raise(\"ERR_TAB_NAME_IS_NOT_SPECIFIED_PROPERLY\");\r\n\r\n me._currentTabSelector = format(me._byNameSelectorTemplate, me._tabSelector, name);\r\n me._jExistingTab = me._jSideBarConatainer.find(me._currentTabSelector);\r\n\r\n if (me._jExistingTab.length > 0) {\r\n global.raise(\"ERR_TAB_WITH_THE_SAME_NAME_ALREADY_EXIST\", name);\r\n };\r\n\r\n var template = format(ControlTemplate.sideBar.tab, name, label, icon, me._cssClass, toolTip);\r\n\r\n if (me._jPlaceHolder.find('.more').length) {\r\n me._jAfterTabs.append(template);\r\n } else {\r\n me._jPlaceHolder.append(template);\r\n }\r\n\r\n me._jSideBarConatainer.find(me._currentTabSelector).addClass(\"last\")\r\n .prev().removeClass(\"last\");\r\n\r\n this._preparePage(name);\r\n\r\n\r\n var tab = new global.components.wrappers.sideBar.Tab(me._currentTabSelector, me._current);\r\n\r\n\r\n tab.bind('click', function () { me._defaultClickHandler(this, name, me._currentTabSelector) });\r\n tab.isSynthetic = true;\r\n\r\n tab.setHtml(format(ControlTemplate.form.tabHelp, L(\"NEW_TAB\"), L(\"WRN_USE_SET_HTML_HELP_TEXT\"), L(\"OM_HELP_HYPERLINK\")));\r\n me.addElement(name, tab);\r\n\r\n if (tabName['jsaction']) {\r\n tab.bind('click', tabName['jsaction']);\r\n };\r\n return tab;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает обработку события щелчка, для измененной DOM структуры.\r\n *\r\n * @private \r\n * @method WebAccess.components.wrappers.sideBar.Tabs#_bindOpenHandler\r\n * @property tabName имя закладки\r\n */\r\n _bindOpenHandler: function (tabName) {\r\n var me = this;\r\n me._current.sideBar.tabs.current.click(function (tabName) {\r\n var currentTabSelector = format(me._byNameSelectorTemplate, me._tabSelector, tabName);\r\n me._openHandler(tabName, currentTabSelector);\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Новые кнопки тоже должны уметь делать expand/collapse\r\n * @private\r\n */\r\n _defaultClickHandler: function (element, name, currentTabSelector) {\r\n var me = this;\r\n if (name !== \"FldTree\" && name !== \"Run\") me._openHandler(name, currentTabSelector);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выбор активной закладки/\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.sideBar.Tabs#_openHandler\r\n * @property tabName имя закладки\r\n * @property me._tabSelector селектор закладки\r\n */\r\n _openHandler: function (tabName, targetTabSelector) {\r\n var me = this;\r\n me._jCardForm.find(me._cardFormTabSelector).hide();\r\n $(me._tabSelector).removeClass('selected');\r\n me._jSideBarConatainer.find(targetTabSelector).addClass('selected');\r\n if (me._current.className !== \"FormDialog\") {\r\n window.location.hash = tabName;\r\n }\r\n me._jCardForm.find(format(me._cardFormTabTemplate, tabName)).show();\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создает имитацию поддержки табов, там где карточки не существует. \r\n * Для возможности переключения табов.\r\n *\r\n * @private \r\n * @method WebAccess.components.wrappers.sideBar.Tabs#_preparePage\r\n * @param {string} name\r\n */\r\n _preparePage: function (name) {\r\n\r\n var me = this;\r\n if (me._current.sideBar.tabs.hasOwnProperty(\"current\")) {\r\n var currentTabName = me._current.sideBar.tabs.current.name;\r\n //Если изначально поддержки табов не было, сделаем их сами.\r\n if (me._jCardForm.length == 0) {\r\n me.noCardFormAtStartFound = true;\r\n if (me._jScroller.children(\"div\").length === 1) {\r\n //Если справочник, но закладка без формы\r\n me._jScroller.children(\"div\").addClass(\"FakeCardForm\");\r\n } else {\r\n //Если мы в ЗЗУ\r\n me._jScroller.wrapInner('
    ');\r\n me._jScroller.wrapInner('
    ');\r\n }\r\n };\r\n\r\n me._jCardForm = $(\".CardForm, .FakeCardForm\");\r\n\r\n //Если содержимое текущей закладки не обернуто в div для таба\r\n if ($(me._cardFormTabSelector).length == 0) {\r\n me._jCardForm.wrapInner('
    ');\r\n //jCardForm.addClass('CardForm_Tab').attr('id', 'CardForm_Tab_' + currentTabName);\r\n this._bindOpenHandler(currentTabName);\r\n };\r\n\r\n if (!me._current.sideBar.tabs.current._jObject.hasClass(\"inline_tab\")) {\r\n this._bindOpenHandler(currentTabName);\r\n }\r\n var template = format(ControlTemplate.form.tab, name);\r\n me._jCardForm.append(template);\r\n if (me.noCardFormAtStartFound) me._jCardForm.find(format(me._cardFormTabTemplate, name)).addClass(\"basic_padding\");\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить наличие закладки боковой панели.\r\n * \r\n * @method WebAccess.components.wrappers.sideBar.Tabs#isExist\r\n * @param tabName Имя закладки\r\n * @return {boolean} True, если закладка существует, иначе False.\r\n */\r\n isExist: function (tabName) {\r\n var me = this;\r\n\r\n var selector = format(me._byNameSelectorTemplate, me._tabSelector, tabName);\r\n me._jExistingTab = me._jSideBarConatainer.find(selector);\r\n return me._jExistingTab.length > 0;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n global.components.wrappers.sideBar.Tabs = Tabs;\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n (function (global) {\r\n\r\n var cssClass = \"sidebar_item\";\r\n\r\n \r\n /**\r\n * Класс-обертка для коллекции закладок\r\n * @class WebAccess.components.wrappers.sideBar.Tabs\r\n * @extends WebAccess.Collecton\r\n * @since 5.2.0.1600 \r\n */\r\n var _ExplorerTabs = global.components.wrappers.sideBar.Tabs.extend({\r\n\r\n _tabSelector: 'div.explorer-search-panel__item',\r\n _byNameSelectorTemplate: '{0}[name=\"{1}\"]',\r\n\r\n \r\n /**\r\n * Новые кнопки тоже должны уметь делать expand/collapse\r\n * @private\r\n */\r\n _defaultClickHandler: function (element, name, currentTabSelector) {\r\n var me = this;\r\n // обработка двойного клика - сворачивание - разворачивание. \r\n var index = $(me._tabSelector).index(element);\r\n\r\n if (window.nowSelect == index) {\r\n if (!me._current.sideBar.isCollapsed()) me._current.sideBar.collapse();\r\n else me._current.sideBar.expand();\r\n }\r\n else {\r\n window.nowSelect = index;\r\n me._current.sideBar.expand();\r\n }\r\n if (name !== \"FldTree\" && name !== \"Run\") CustomSearch(name, this); \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить наличие закладки боковой панели.\r\n * \r\n * @method WebAccess.components.wrappers.sideBar.Tabs#isExist\r\n * @param tabName Имя закладки\r\n * @return {boolean} True, если закладка существует, иначе False.\r\n */\r\n isExist: function (tabName) {\r\n var me = this;\r\n\r\n var selector = format(byNameSelectorTemplate, me._tabSelector, tabName);\r\n me._jExistingTab = me._jSideBarConatainer.find(selector);\r\n return me._jExistingTab.length > 0;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Создать новую закладку боковой панели.\r\n **/\r\n // TODO: Возможность создавать закладки временно отключена.\r\n create: function (tabName) { return; }\r\n\r\n });\r\n\r\n global.components.wrappers.sideBar._ExplorerTabs = _ExplorerTabs;\r\n\r\n})(window.WebAccess);","'use_strict';\r\n\r\n(function defSideBar(global) {\r\n\r\n // Константы\r\n const tabSelector = 'div.tab_item';\r\n const moreTabName = 'More';\r\n const moreTabSelector = '.more';\r\n\r\n /**\r\n * Класс-обертка для панели закладок\r\n * @class WebAccess.components.wrappers.sideBar.SideBar\r\n * @since 5.2.0.1600\r\n */\r\n const SideBar = BaseObject.extend({\r\n\r\n /**\r\n * @inheritDoc\r\n * @param {string} containerSelector Селектор контейнера сайдбара.\r\n * @param {object} current Текущий объект системы.\r\n */\r\n init(containerSelector, current) {\r\n this._jSideBar = $(containerSelector);\r\n this._jAfterTabs = this._jSideBar.find(\".after_tabs\");\r\n this._super();\r\n\r\n // Не появляется горизонтальный скроллинг в детальном разделе, пока не\r\n // пошевелишь колонки\r\n // #106665\r\n // Это может быть медленно, особенно где много вкладок и таблиц\r\n this.bind(this['class'].EVENT.AFTER_TAB_SWITCH, () => {\r\n _(current._getGrids()).each((grid) => {\r\n setTimeout(() => {\r\n grid.grid.resizeCanvas();\r\n\r\n // #106257 Поле в детальном разделе не становится активным. Помогает обновление страницы\r\n grid.grid.resetActiveCell();\r\n }, 0);\r\n });\r\n });\r\n\r\n // Сворачивает вкладки в \"Еще\" при изменении размеров экрана.\r\n $(window).bind('resizeEnd', () => {\r\n this.resizeHorizontalTabs();\r\n }); \r\n },\r\n\r\n /**\r\n * Cворачивание / разорачивание горизонтальных закладок в кнопку еще.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#resizeHorizontalTabs \r\n * @return {WebAccess.current.sideBar} Текущий сайдбар.\r\n * @since 5.7.0\r\n */\r\n resizeHorizontalTabs() {\r\n this._jAfterTabs.addClass(\"hidden\");\r\n this._fitHorizontalTabs();\r\n },\r\n\r\n\r\n /**\r\n * Логика сворачивания / разорачивания горизонтальных закладок в кнопку еще.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_fitHorizontalTabs\r\n * @private\r\n * @return {WebAccess.current.sideBar} Текущий сайдбар.\r\n * @since 5.2.0.1600\r\n */\r\n _fitHorizontalTabs() {\r\n return this._fitTabs('outerWidth', this._jSideBar.width());\r\n },\r\n\r\n /**\r\n * Логика сворачивания / разорачивания вертикальных закладок в кнопку Еще.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_fitVerticalTabs\r\n * @private\r\n * @return {WebAccess.current.sideBar} Текущий сайдбар.\r\n * @since 5.2.0.1600\r\n */\r\n _fitVerticalTabs() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Подсчет ширины или высоты всех закладок.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_getSideBarSize\r\n * @private\r\n * @return {number} Ширина сайдбара в пикселах.\r\n * @since 5.2.0.1600\r\n */\r\n _getSideBarSize() {\r\n let sideBarSize = 0;\r\n\r\n this._jSideBar.find(`${tabSelector}:visible`).each(function () {\r\n sideBarSize += $(this).outerWidth();\r\n });\r\n\r\n return sideBarSize;\r\n },\r\n\r\n /**\r\n * Получение ширины или высоты последней нескрытой закладки (не учитывая закладку \"Еще\").\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_getLastTabSize\r\n * @param {object} jSideBar - контейнер сайдбара\r\n * @param {string} sizeName - измерение (доступные значения: 'outerWidth', 'outerHeight').\r\n * @private\r\n * @return {integer} Ширина последней вкладки в пикселах.\r\n * @since 5.2.0.1600\r\n */\r\n _getLastTabSize(sizeName) {\r\n let jTabs = this._jSideBar.find('span:first').find(tabSelector);\r\n return $.fn[sizeName].call(jTabs.not(moreTabSelector).last(), true);\r\n },\r\n\r\n /**\r\n * Логика сворачивания / разворачивания закладок в кнопку \"Еще\".\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_fitTabs\r\n * @param {string} sizeName - измерение (доступные значения: 'outerWidth', 'outerHeight').\r\n * @param {number} availableSize - доступная максимальная величина измерения.\r\n * @private\r\n * @return {WebAccess.current.sideBar} Текущий сайдбар.\r\n * @since 5.2.0.1600\r\n */\r\n _fitTabs(sizeName, availableSize) {\r\n // Скрыть сайдбар\r\n this._jSideBar.css('display', 'hidden');\r\n\r\n // Развернуть сайдбар полностью\r\n while (this.expand()) ;\r\n\r\n // Свернуть группы, если необходимо\r\n while (availableSize < this._getSideBarSize() && this.collapse()) ;\r\n\r\n // Отобразить сайдбар\r\n this._jSideBar.css('display', 'block');\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Восстановить спрятанные закладки\r\n * Спрятать кнопку \"Еще\".\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_internalExpand\r\n * @private\r\n * @return {boolean} имеется ли возможность дальнейшего разворачивания\r\n * @since 5.2.0.1600\r\n */\r\n _internalExpand(jSideBar) {\r\n let collapsedTabs = this._jAfterTabs.find(tabSelector);\r\n let firstCollapsedTab = collapsedTabs.first();\r\n let prevId = firstCollapsedTab.data('prevId');\r\n\r\n if (prevId) {\r\n this._jSideBar\r\n .find(`#${prevId}`)\r\n .after(firstCollapsedTab);\r\n } else {\r\n this._jSideBar\r\n .find(`${tabSelector}:first`)\r\n .before(firstCollapsedTab);\r\n }\r\n\r\n if (collapsedTabs.length === 1) {\r\n this._internalExpand();\r\n }\r\n\r\n let jFirstTab = this._jAfterTabs.find(`${tabSelector}:first`);\r\n if (!jFirstTab.length) {\r\n if (!!this.tabs[moreTabName]) {\r\n this.tabs[moreTabName]._jObject.remove();\r\n delete this.tabs[moreTabName];\r\n }\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n /**\r\n * Показать кнопку \"Еще\".\r\n * Спрятать все, что не влазит в неё.\r\n * Создать выпадющее меню по аналогии с группами.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_internalCollapse\r\n * @private\r\n * @return {boolean} имеется ли возможность дальнейшего сворачивания\r\n * @since 5.2.0.1600\r\n */\r\n _internalCollapse() {\r\n // Если нет вкладки \"Ещё\", то добавим ее\r\n if (!this.tabs[moreTabName]) {\r\n let moreTab = this.tabs.create({\r\n name: moreTabName,\r\n label: L('MORE_TABS'),\r\n toolTip: L('OTHER_TABS'),\r\n });\r\n moreTab.click(() => {\r\n });\r\n\r\n // Установим событие нажатия на вкладку\r\n moreTab._jObject.click((event) => {\r\n event.stopPropagation();\r\n this._jAfterTabs.toggleClass(\"hidden\");\r\n\r\n let collapsedTabsLeftOffset = moreTab._jObject.offset().left;\r\n let collapsedTabsWidth = this._jAfterTabs.width();\r\n\r\n if (collapsedTabsLeftOffset + collapsedTabsWidth > windowWidth()) {\r\n collapsedTabsLeftOffset = windowWidth() - collapsedTabsWidth - 10;\r\n }\r\n\r\n this._jAfterTabs.css({\r\n left: collapsedTabsLeftOffset,\r\n });\r\n $('.CardForm').redraw(); //#106605\r\n });\r\n } else {\r\n this.tabs[moreTabName].show();\r\n }\r\n\r\n let jMore = this._jSideBar\r\n .find(this.tabs[moreTabName].selector)\r\n .addClass('more');\r\n\r\n let lastTab = jMore.prev(tabSelector);\r\n if (!lastTab.length) {\r\n return false;\r\n }\r\n\r\n if (lastTab.hasClass('selected')) {\r\n lastTab = lastTab.prev(tabSelector);\r\n if (!lastTab.length) {\r\n return false;\r\n }\r\n }\r\n\r\n lastTab.data('prevId', lastTab.prev().attr('id'));\r\n this._jAfterTabs.prepend(lastTab);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Развернуть содержимое закладок или дерево задач в проводнике.\r\n * В карточках объектов пошагово переносит скрытые закладки с закладки «Еще» на боковую панель.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#expand\r\n */\r\n expand() {\r\n return this._internalExpand();\r\n },\r\n\r\n /**\r\n * Свернуть содержимое закладок или дерево папок в проводнике.\r\n * В карточках объектов пошагово переносит закладки с боковой панели на закладку «Еще».\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#collapse\r\n * @return {WebAccess.current.sideBar | boolean} True – имеется возможность свернуть содержимое закладок, иначе False.\r\n */\r\n collapse() {\r\n return this._internalCollapse();\r\n },\r\n\r\n /**\r\n * Проверить, свернута ли боковая панель.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#isCollapsed\r\n * @since 5.2.0.1600\r\n */\r\n isCollapsed() {\r\n return !!this.tabs[moreTabName];\r\n },\r\n\r\n /**\r\n * Изменить расположение боковой панели.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#setOrientation\r\n * @param {ORIENTATION} orientation Режим расположения боковой панели.\r\n * Возможные значения:HORIZONTAL – горизонтальное; VERTICAL – вертикальное.\r\n * @since 5.2.0.1600\r\n */\r\n setOrientation(orientation) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n },\r\n\r\n /**\r\n * Проверить, вертикально ли распологается боковая панель.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#isVertical\r\n * @return {boolean} True – боковая панель располагается вертикально, иначе False.\r\n * @since 5.0.0.4206\r\n */\r\n isVertical() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return false;\r\n },\r\n\r\n /**\r\n * Установить первоначальное положение закладок боковой панели.\r\n *\r\n * @deprecated since 5.6.\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#moveSidebarToLeftColumn\r\n * @since 5.2.0.1600\r\n */\r\n moveSidebarToLeftColumn() {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n return this;\r\n }\r\n }, {\r\n EVENT: {\r\n /**\r\n * Срабатывает до смены закладки\r\n * @event WebAccess.components.wrappers.sideBar.SideBar.EVENT.BEFORE_TAB_SWITCH\r\n * @param {WebAccess.components.wrappers.sideBar.Tab} закладка,\r\n * на которую произошло переключение\r\n * @since 5.2.0.1304\r\n */\r\n BEFORE_TAB_SWITCH: 'beforeTabSwitch',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Срабатывает после смены закладки\r\n * @event WebAccess.components.wrappers.sideBar.SideBar.EVENT.AFTER_TAB_SWITCH\r\n * @param {WebAccess.components.wrappers.sideBar.Tab} закладка,\r\n * на которую произошло переключение\r\n * @since 5.2.0.1304\r\n */\r\n AFTER_TAB_SWITCH: 'afterTabSwitch'\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n }\r\n }\r\n );\r\n\r\n WA.CMP.wrappers.sideBar.SideBar = SideBar;\r\n\r\n})(window.WA);\r\n","; \"use_strict\";\r\n(function defSideBar(global) {\r\n\r\n var cssClass = \"tab_item\";\r\n\r\n /**\r\n * Часто используемые селекторы\r\n */\r\n var noCardFormAtStartFound = false;\r\n\r\n var tabSelector = \"div.tab_item\";\r\n var byNameSelectorTemplate = \"{0}[name='{1}']\";\r\n var cardFormTabTemplate = '#CardForm_Tab_{0}';\r\n var cardFormTabSelector = 'div.CardForm_Tab';\r\n\r\n /**\r\n * У проводника немного другая верстка\r\n */\r\n /*if (global.getLocation() == \"explorer\") {\r\n sideBarConatainerSelector = \"#sidebar_container\";\r\n tabSelector = \"div.sidebar_item\";\r\n cssClass = \"sidebar_item\";\r\n }*/\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Частоиспользуемые jQuery объекты\r\n */\r\n\r\n /**\r\n * Класс-обертка для панели закладок\r\n * @class WebAccess.components.wrappers.sideBar.SideBar\r\n * @since 5.2.0.1600 \r\n */\r\n var _ExplorerSideBar = WA.CMP.wrappers.sideBar.SideBar.extend({\r\n _jContainer: null,\r\n _current: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Логика сворачивания / разорачивания горизонтальных закладок в кнопку еще.\r\n *\r\n * @function WebAccess.components.wrappers.sideBar.SideBar#_fitHorizontalTabs\r\n * @private\r\n * @since 5.2.0.1600\r\n * @return {WebAccess.current.sideBar}\r\n */\r\n _fitHorizontalTabs: global.TCD(function () {\r\n return false;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Логика сворачивания / разорачивания вертикальных закладок в кнопку Еще.\r\n *\r\n * @function WebAccess.components.wrappers.sideBar.SideBar#_fitVerticalTabs\r\n * @private\r\n * @since 5.2.0.1600\r\n * @return {WebAccess.current.sideBar}\r\n */\r\n _fitVerticalTabs: global.TCD(function () {\r\n return false;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подсчет ширины или высоты всех закладок.\r\n *\r\n * @function WebAccess.components.wrappers.sideBar.SideBar#_getSideBarSize\r\n * @since 5.2.0.1600\r\n * @private\r\n * @param {object} jSideBar - контейнер сайдбара\r\n * @param {string} sizeName - измерение (доступные значения: 'outerWidth', 'outerHeight').\r\n * @return {integer} ширина сайдбара\r\n */\r\n _getSideBarSize: function (sizeName) {\r\n var me = this;\r\n var sideBarSize = 0;\r\n\r\n me._jSideBar.find('span:first').find(tabSelector).each(function () {\r\n sideBarSize += $.fn[sizeName].call($(this), true);\r\n });\r\n\r\n if (!this.isVertical()) sideBarSize += $(\".more\").width();\r\n return sideBarSize;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получение ширины или высоты последней нескрытой закладки (не учитывая закладку \"Еще\").\r\n *\r\n * @function WebAccess.components.wrappers.sideBar.SideBar#_getLastTabSize\r\n * @since 5.2.0.1600\r\n * @private\r\n * @param {object} jSideBar - контейнер сайдбара\r\n * @param {string} sizeName - измерение (доступные значения: 'outerWidth', 'outerHeight').\r\n * @return {integer}\r\n */\r\n _getLastTabSize: function (sizeName) {\r\n var me = this;\r\n var tabs = me._jSideBar.find('span:first').find(tabSelector);\r\n return $.fn[sizeName].call(tabs.not('.more').last(), true);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /** \r\n * Развернуть содержимое закладок или дерево задач в проводнике.\r\n * В карточках объектов пошагово переносит скрытые закладки с закладки «Еще» на боковую панель.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#expand\r\n */\r\n expand: global.TCD(function () {\r\n var jTreeArea = $(\".explorer-header__tree-area\");\r\n var jLeftContainer = $(\"#left_column\");\r\n var jTreeContainer = $(\"#tree_container\");\r\n var jExpandTreeContainer = $(\"#expand_tree_container\");\r\n var jExpandHeaderContainer = $(\".explorer-header__expand-area\");\r\n var jRightColumn = $(\"#right_column\");\r\n const jHeader = $('#top_content');\r\n\r\n jLeftContainer.removeClass('left_column_collapsed');\r\n jRightColumn.removeClass('left_column_collapsed');\r\n jHeader.removeClass('left_column_collapsed');\r\n\r\n jExpandTreeContainer.hide();\r\n jExpandHeaderContainer.hide();\r\n\r\n jTreeContainer.show();\r\n jTreeArea.show();\r\n\r\n $.cookie('SideBarCollapsed', '0', { expires: 70000 });\r\n return this;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Свернуть содержимое закладок или дерево папок в проводнике.\r\n * В карточках объектов пошагово переносит закладки с боковой панели на закладку «Еще».\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#collapse\r\n * @param {string} tabName Имя закладки\r\n * @return {WebAccess.current.sideBar | boolean} True – имеется возможность свернуть содержимое закладок, иначе False.\r\n */\r\n collapse: global.TCD(function () {\r\n var jTreeArea = $(\".explorer-header__tree-area\");\r\n var jLeftContainer = $(\"#left_column\");\r\n var jTreeContainer = $(\"#tree_container\");\r\n var jExpandTreeContainer = $(\"#expand_tree_container\");\r\n var jExpandHeaderContainer = $(\".explorer-header__expand-area\");\r\n var jRightColumn = $(\"#right_column\");\r\n const jHeader = $('#top_content');\r\n\r\n jLeftContainer.addClass('left_column_collapsed');\r\n jRightColumn.addClass('left_column_collapsed');\r\n jHeader.addClass('left_column_collapsed');\r\n\r\n jTreeContainer.hide();\r\n jTreeArea.hide();\r\n\r\n jExpandTreeContainer.show();\r\n jExpandHeaderContainer.show();\r\n\r\n $.cookie('SideBarCollapsed', '1', { expires: 70000 });\r\n return this;\r\n }),\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить, свернута ли боковая панель.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#isCollapsed\r\n * @param {String} tabName Имя закладки\r\n * @since 5.2.0.1600\r\n */\r\n isCollapsed: function () {\r\n var me = this;\r\n return !$(\"#tree_container\").is(\":visible\");\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Изменить расположение боковой панели.\r\n *\r\n\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#setOrientation\r\n * @todo проверить в разных местах, например в проводнике, мастерах\r\n * @fixme с иконками в обратную сторону пока плохо.\r\n * @param {ORIENTATION} orientation Режим расположения боковой панели. \r\n * Возможные значения:HORIZONTAL – горизонтальное; VERTICAL – вертикальное.\r\n * @since 5.2.0.1600\r\n * @example\r\n *\r\n * //Установить горизонтальное расположение боковой панели.\r\n * WA.CR.sideBar.setOrientation(ORIENTATION.HORIZONTAL)\r\n */\r\n setOrientation: function (orientation) {\r\n var me = this;\r\n\r\n if (orientation == ORIENTATION.HORIZONTAL) {\r\n me._jSideBar.removeClass(\"vertical\").addClass(\"horizontal\");\r\n $(\"#right_column\").addClass(\"no_margin\");\r\n me._jSideBar.find(tabSelector + \" p\").each(function () {\r\n var smallIcon = $(this).data('smallicon');\r\n $(this).removeClass().addClass(smallIcon);\r\n });\r\n\r\n this._fitHorizontalTabs();\r\n this._moveSidebarBeforeCustomWorkCard();\r\n } else {\r\n me._jSideBar.addClass(\"vertical\").removeClass(\"horizontal\");\r\n\r\n $(\"#right_column\").removeClass(\"no_margin\");\r\n me._jSideBar.find(tabSelector + \" p\").each(function () {\r\n var icon = $(this).data('icon');\r\n $(this).removeClass().addClass(icon);\r\n });\r\n\r\n this._fitVerticalTabs();\r\n this.moveSidebarToLeftColumn();\r\n };\r\n\r\n // Скрывает панель \"Еще\".\r\n $('body').off('click.tabs').on('click.tabs', function () {\r\n me._jAfterTabs.addClass(\"hidden\");\r\n });\r\n\r\n // Сворачивает вкладки в \"Еще\" при изменении размеров экрана.\r\n $(window).bind('resizeEnd', function () {\r\n me._jAfterTabs.addClass(\"hidden\");\r\n if (me._jSideBar.hasClass(\"horizontal\")) {\r\n me._fitHorizontalTabs();\r\n } else {\r\n me._fitVerticalTabs();\r\n };\r\n });\r\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверить, вертикально ли распологается боковая панель.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#isVertical\r\n * @since 5.0.0.4206\r\n * @return {boolean} True – боковая панель располагается вертикально, иначе False.\r\n */\r\n isVertical: function () {\r\n var me = this;\r\n return !$(\"#left_column\").hasClass(\"horizontal\");\r\n },\r\n\r\n /**\r\n * Переносит вкладки внутрь основной области, что бы минитулбар вложений был с ними на одном уровне.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#_moveSidebarBeforeCustomWorkCard\r\n * @since 5.2.0.1600 \r\n * @private \r\n */\r\n _moveSidebarBeforeCustomWorkCard: function () {\r\n var me = this;\r\n var view = GetParamInURL(\"view\").toLowerCase();\r\n if (view !== \"card\" && view !== \"\") return;\r\n if (me._jSideBar.hasClass('horizontal')) {\r\n var jMainContainer = $('#main_container');\r\n var jAttachment = jMainContainer.find('.attachments_td');\r\n var jLeftColumn = $('#left_column');\r\n if (jAttachment.length > 0) {\r\n // Перенос.\r\n jMainContainer.find('.card').before(jLeftColumn);\r\n // Корректируем стили левой колонки, что бы не наезжала на минитулбар вложений.\r\n var attachmentWidth = parseInt(jAttachment.width(), 10);\r\n jLeftColumn.css({ 'width': 'auto', 'marginRight': attachmentWidth - 5 });\r\n // Корректируем размер полей текста ЗЗУ.\r\n if (typeof (initSavedTextHeight) !== 'undefined') initSavedTextHeight();\r\n }\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить первоначальное положение закладок боковой панели.\r\n *\r\n * @method WebAccess.components.wrappers.sideBar.SideBar#moveSidebarToLeftColumn\r\n * @since 5.2.0.1600 \r\n */\r\n // \r\n moveSidebarToLeftColumn: function () {\r\n var me = this;\r\n var jLeftColumn = $('#left_column');\r\n var jRightColumn = $('#right_column');\r\n // Перенос.\r\n jRightColumn.before(jLeftColumn);\r\n // Корректируем стили левой колонки.\r\n jLeftColumn.css({ 'width': '', 'marginRight': '' }); //FIXME: проверить на планшетах\r\n // Корректируем размер полей текста ЗЗУ.\r\n if (typeof (initSavedTextHeight) !== 'undefined') initSavedTextHeight();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n WA.CMP.wrappers.sideBar._ExplorerSideBar = _ExplorerSideBar;\r\n\r\n})(window.WA);","\"use strict\";\r\n\r\n/**\r\n* Ссылка.\r\n* \r\n* @class WebAccess.components.wrappers.form.Link\r\n* @extends WebAccess.components.wrappers.BasePageElement\r\n* @property {string} name Имя ссылки\r\n* @property {string} selector Путь в DOM-иерархии к объекту группы, например div.content#container\r\n* @param {string} itemSelector Cуществующий элемент страницы\r\n*/\r\n(function (global) {\r\n \r\n var Link = global.components.wrappers.BasePageElement.extend({\r\n\r\n init: function (itemSelector) {\r\n this._super(itemSelector);\r\n this.name = this._jObject.attr('id');\r\n this.selector = \"#\" + this.name;\r\n this.actionName = this._jObject.data('action-name');\r\n }, \r\n\r\n className: \"Link\",\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Имитировать щелчок мыши.\r\n * Имитация щелчка мыши по ссылке либо установка обработчика на событие onClick, если передан callback. \r\n * Заменяет обработчик по умолчанию.\r\n * \r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по ссылке\r\n * @method WebAccess.components.wrappers.form.Link#click \r\n * @return {button}\r\n */\r\n click: function (opt_callback) {\r\n var me = this;\r\n if ($.isFunction(opt_callback)) {\r\n var jObject = me._jObject;\r\n me._super(function () {\r\n if (!jObject.hasClass('disabled')) opt_callback();\r\n });\r\n jObject.addClass('binded');\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подписка на события\r\n * \r\n * @param {string} event\r\n * @method WebAccess.components.wrappers.form.Link#bind\r\n * @return { WebAccess.components.wrappers.form.Link}\r\n */\r\n bind: function (event, callback) {\r\n var me = this;\r\n if ($.isFunction(callback)) {\r\n var jObject = me._jObject;\r\n me._super(event, function () {\r\n if (!jObject.hasClass('disabled')) callback();\r\n });\r\n jObject.addClass('binded');\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отключение ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#disable\r\n * @return { WebAccess.components.wrappers.form.Link}\r\n * @see module:tests/FormControls~isLinkRealyDisabled\r\n */\r\n disable: function () {\r\n if (this.isEnabled()) {\r\n this._super();\r\n this._jObject.addClass('disabled');\r\n };\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включение ссылки, если она была отключена ранее.\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#enable\r\n * @return { WebAccess.components.wrappers.form.Link}\r\n * @see module:tests/FormControls~isLinkRealyEnabled\r\n */\r\n enable: function () {\r\n if (!this.isEnabled()) {\r\n this._super();\r\n this._jObject.removeClass('disabled');\r\n };\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить подпись ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#getLabel\r\n * @return {string}\r\n * @see module:tests/FormControls~getLabelValue\r\n */\r\n getLabel: function() { \r\n return this._jObject.text();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить подпись ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#setLabel\r\n * @param {string} text текст подписи\r\n * @see module:tests/FormControls~setLabelValue\r\n * @return {link}\r\n */\r\n setLabel: function(text) {\r\n this._jObject.text(text);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.Link#setIcon\r\n */\r\n setIcon: function (path) {\r\n global.raise(\"ERR_UNSUPPORTED_METHOD\");\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.Link#getIcon\r\n */\r\n getIcon: function (path) { \r\n global.raise(\"ERR_UNSUPPORTED_METHOD\");\r\n return this;\r\n },\r\n\r\n /**\r\n * Отображает гиперссылку.\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#show\r\n * @return {WebAccess.components.wrappers.form.Link} Объект типа Link.\r\n */\r\n show: function () {\r\n this._jObject.css('visibility', 'visible');\r\n this.fire(\"show\");\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрывает гиперссылку.\r\n * \r\n * @method WebAccess.components.wrappers.form.Link#hide\r\n * @return {WebAccess.components.wrappers.form.Link} Объект типа Link.\r\n */\r\n hide: function () {\r\n this._jObject.css('visibility', 'hidden');\r\n this.fire(\"hide\");\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n global.components.wrappers.form.Link = Link;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Кнопка.\r\n* \r\n* @class WebAccess.components.wrappers.form.Button\r\n* @extends WebAccess.components.wrappers.BasePageElement\r\n* @property {string} name Имя ссылки\r\n* @property {string} actionName имя дествия\r\n* @property {string} selector Путь в DOM-иерархии к объекту группы, например div.content#container\r\n* @param {string} itemSelector Cуществующий элемент страницы\r\n*/\r\n(function (global) {\r\n\r\n var Button = global.components.wrappers.BasePageElement.extend({\r\n\r\n init: function (itemSelector) {\r\n this._super(itemSelector);\r\n this.name = this._jObject.attr('button-name') || this._jObject.attr('id');\r\n this.actionName = this._jObject.data('action-name');\r\n this.selector = \"#\" + this.name; //TODO Будет неправильный селектор если указано button-name\r\n },\r\n\r\n className: \"Button\",\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n\r\n /**\r\n * Имитировать щелчок мыши.\r\n * Имитация щелчка мыши по ссылке либо установка обработчика на событие onClick, если передан callback. \r\n * Заменяет обработчик по умолчанию.\r\n * \r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по ссылке\r\n * @method WebAccess.components.wrappers.form.Button#click \r\n * @return {button}\r\n */\r\n click: function (opt_callback) {\r\n var me = this;\r\n me._super(opt_callback);\r\n if ($.isFunction(opt_callback)) {\r\n this._jObject.addClass('binded_button').removeClass('disabled');\r\n }\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Выхов нашего fire при клике на элемент\r\n * @private\r\n */\r\n _eventHandler: function (event) {\r\n var eventName = event.data.eventName;\r\n var name = event.data.actionName;\r\n var element = event.data.instance;\r\n var continueDefaultAction = event.data.continueDefaultAction;\r\n if (element.fire(eventName, name, continueDefaultAction) !== false && eventName === 'click') {\r\n element._defaultAction.call(element);\r\n };\r\n },\r\n\r\n /**\r\n * Подписка на события\r\n * \r\n * @param {string} event\r\n * @method WebAccess.components.wrappers.form.Button#bind\r\n * @return { WebAccess.components.wrappers.form.Button}\r\n */\r\n bind: function (event, callback) {\r\n var instance = this;\r\n this._super(event, callback);\r\n\r\n //if (event == \"click\") this._disableClickHandler(this._jObject); \r\n this._jObject.unbind(event, this._eventHanler).bind(event, {\r\n \"instance\": instance,\r\n \"eventName\": event,\r\n \"buttonName\": instance.name,\r\n \"actionName\": instance._jObject.data('action-name'),\r\n \"continueDefaultAction\": $.proxy(instance._defaultAction, instance)\r\n }, this._eventHandler);\r\n\r\n this._jObject.addClass('binded_button').removeClass('disabled');\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Отключение ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Button#disable\r\n * @return { WebAccess.components.wrappers.form.Button}\r\n * @see module:tests/FormControls~isLinkRealyDisabled\r\n */\r\n disable: function () {\r\n if (this.isEnabled()) {\r\n this._super();\r\n this._jObject.removeClass(\"binded_button\");\r\n this._jObject.attr(\"disabled\", \"disabled\");\r\n return this;\r\n };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включение ссылки, если она была отключена ранее.\r\n * \r\n * @method WebAccess.components.wrappers.form.Button#enable\r\n * @return { WebAccess.components.wrappers.form.Button}\r\n * @see module:tests/FormControls~isLinkRealyEnabled\r\n */\r\n enable: function () {\r\n if (!this.isEnabled()) {\r\n this._super();\r\n this._jObject.addClass(\"binded_button\");\r\n this._jObject.removeAttr(\"disabled\");\r\n return this;\r\n };\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить подпись ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Button#getLabel\r\n * @return {string}\r\n * @see module:tests/FormControls~getLabelValue\r\n */\r\n getLabel: function () {\r\n return this._jObject.val();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить подпись ссылки\r\n * \r\n * @method WebAccess.components.wrappers.form.Button#setLabel\r\n * @param {string} text текст подписи\r\n * @see module:tests/FormControls~setLabelValue\r\n * @return {link}\r\n */\r\n setLabel: function (text) {\r\n this._jObject.val(text);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.Button#setIcon\r\n */\r\n setIcon: function (path) {\r\n global.raise(\"ERR_UNSUPPORTED_METHOD\");\r\n return this;\r\n },\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.Button#getIcon\r\n */\r\n getIcon: function (path) {\r\n global.raise(\"ERR_UNSUPPORTED_METHOD\");\r\n return this;\r\n }\r\n });\r\n\r\n global.components.wrappers.form.Button = Button;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Предоставляет работу с деревом папок.\r\n*\r\n* @namespace WebAccess.components.wrappers.folderTree.FolderTree\r\n* @property {string} containerSelector Блок, содержащий дерево папок\r\n* @fires WebAccess.current.objectList#onChange Вызывается после изменения дерева папок.\r\n* @since 5.2.0.1600\r\n*/\r\n\r\n(function (global) {\r\n\r\n var FolderTree = BaseObject.extend({\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n className: 'FolderTree',\r\n containerSelector: '#tree_container',\r\n\r\n _data: [],\r\n _containerId: {},\r\n _promise: null,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n init: function (promise) { \r\n this._super();\r\n this._promise = promise;\r\n },\r\n\r\n /**\r\n * Инициализирует объектную модель для react-компоненты.\r\n * @param {string} containerId ID контейнера\r\n * @param {Array} state Модель дерева.\r\n */\r\n initComponent: function (containerId, state) { \r\n this._data = state;\r\n this._containerId = containerId;\r\n this.containerSelector = '#' + containerId;\r\n\r\n if (this._promise) this._promise.resolve();\r\n },\r\n\r\n /**\r\n * Установить произвольное содержимое вместо текущего списка объектов.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.setHtml\r\n * @return {WebAccess.components.wrappers.folderTree.FolderTree} Объект типа folderTree.\r\n */\r\n setHtml: function (html) {\r\n $(this.containerSelector).html(html);\r\n return this;\r\n },\r\n\r\n /**\r\n * Выполнить переход в указанную папку.\r\n *\r\n * @param {object} [nodeInfo] Элемент дерева.\r\n */\r\n selectNode(nodeInfo = false) {\r\n // Если не указан nodeInfo, передаём обрабтку события дальше.\r\n if (!nodeInfo) {\r\n return false;\r\n }\r\n\r\n const gridWidths = JSON.parse(localStorage.getItem(window.FOLDER_GRID.WIDTHS_STORAGE_KEY) || \"{}\");\r\n const folderOptions = gridWidths[nodeInfo.id] || {};\r\n nodeInfo.folderMode = folderOptions[window.FOLDER_GRID.FOLDER_MODE_KEY] ||\r\n (nodeInfo.hasFolderCover ? window.FOLDER_MODE.COVER : window.FOLDER_MODE.NONE);\r\n\r\n const url = this._buildFolderUrl(nodeInfo);\r\n const prevPath = window.GetParamInURL('fpath');\r\n const nextPath = nodeInfo.key;\r\n\r\n // Записать в историю переход.\r\n let state = {\r\n type: 'explorer',\r\n folderID: nodeInfo.id,\r\n path: nodeInfo.key,\r\n title: nodeInfo.caption,\r\n folderMode: nodeInfo.folderMode,\r\n hasCoverOnly: nodeInfo.showCoverOnly,\r\n contentType: nodeInfo.contentType\r\n };\r\n WA.history.pushState(state, nodeInfo.caption, url);\r\n\r\n this.markAsSelected(nodeInfo);\r\n\r\n // Раскроем список. По информации найдем реальный узел, т.к. в инфо-объекте нет ссылок на потомков.\r\n let node = this._findNode(this._data, (n) => {\r\n return (n.key === nodeInfo.key);\r\n });\r\n if (node.children && node.children.length) {\r\n if (prevPath !== nextPath) {\r\n // Если до этого находились в другом узле, то выбранный всегда только раскрываем.\r\n this.openNode({ key: node.key });\r\n } else {\r\n this.toggleNode({ key: node.key });\r\n }\r\n } else {\r\n this.loadNode({ key: node.key }, () => {\r\n this.openNode({ key: node.key });\r\n });\r\n }\r\n // Отметим узел как выбранный и перерисуем дерево.\r\n this._render(this._data);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Отмечает узел в модели как выбранный.\r\n * @param {object} node Узел дерева.\r\n */\r\n markAsSelected: function (node) {\r\n var me = this;\r\n me._mapNodes(me._data, function (n) {\r\n n.selected = (n.key === node.key);\r\n return n;\r\n });\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Открыть папку по fpath.\r\n *\r\n * @param {str} fpath Путь к папке.\r\n * @param {boolean} triggerClick Необходимость вызвать событие клика.\r\n */\r\n selectNodeByPath: function (fpath, triggerClick) {\r\n var me = this;\r\n var node = me._findNode(me._data, function (n) { return n.key === fpath });\r\n if (!node) {\r\n // Проверим, что папка является следующей по fpath. Если да, то загрузим узел и раскроем его.\r\n var currentPath = GetParamInURL('fpath');\r\n var prevPath = fpath.substring(fpath.indexOf('-') + 1, fpath.length);\r\n if (prevPath === currentPath && me._findNode(me._data, function (n) { return n.key === currentPath }) !== null) {\r\n me.loadNode({ key: currentPath }, function () {\r\n me.toggleNode({ key: currentPath });\r\n me.selectNodeByPath(fpath, triggerClick);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n if (triggerClick) {\r\n me.selectNode(node);\r\n } else {\r\n // Отметим узел как выбранный и перерисуем дерево.\r\n me.markAsSelected(node)\r\n ._render(me._data);\r\n };\r\n return true;\r\n },\r\n\r\n /**\r\n * Обновить счетчик непрочитанных.\r\n *\r\n * @param {integer} folderID ИД папки.\r\n */\r\n updateUnreadJobCount: function (folderID, forceUpdateCache) {\r\n var me = this;\r\n\r\n var nodes = me._findNodes(me._data, function (n) {\r\n return n.id == folderID && n.showUnread;\r\n });\r\n\r\n if (nodes.length > 0) {\r\n WA.SRV.call('/Folder.asmx/GetUnreadJobCount', { 'FolderID': folderID }).done(function (count) {\r\n $.each(nodes, function (i, node) {\r\n node.unreadCount = count;\r\n });\r\n\r\n me._render(me._data);\r\n document.title = nodes[0].caption + (count > 0 ? ' (' + count + ')' : '');\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Обновляет узел дерева.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.updateNode\r\n * @param {} folderPath Путь к папке.\r\n * @param {} callback Callback-функция.\r\n */\r\n _updateNode: function (folderPath, callback) {\r\n var me = this;\r\n callback = callback || $.noop;\r\n\r\n var node = me._findNode(me._data, function (n) { return n.key === folderPath; });\r\n\r\n me.loadNode(node, function () {\r\n me._render(me._data);\r\n callback();\r\n });\r\n },\r\n\r\n /**\r\n * Обновляет все дерево целиком.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.update\r\n * @param {function} callback Callback-функция.\r\n */\r\n update: function (callback) {\r\n var me = this;\r\n var id = WA.CR.getID();\r\n var fpath = GetParamInURL('fpath');\r\n\r\n me.loadNode({ id: id, key: fpath }, function () {\r\n me._render(me._data);\r\n HideSpinner();\r\n if (callback) callback();\r\n });\r\n },\r\n\r\n /**\r\n * Обновить узел для указанной папки.\r\n *\r\n * @param {int} folderID ИД папки.\r\n * @param {function} callback Callback-функция.\r\n */\r\n updateByFolderID: function (folderID, callback) {\r\n var me = this;\r\n\r\n var nodes = me._findNodes(me._data, function (n) {\r\n return n.id == folderID;\r\n });\r\n\r\n if (nodes && nodes.length > 0) {\r\n me._getNodeContent(nodes[0]).done(function (children) {\r\n nodes.forEach(function (node) {\r\n node.children = JSON.parse(children);\r\n node.hasChildren = !!node.children.length;\r\n });\r\n\r\n me._render(me._data);\r\n if (callback) callback();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Обновляет узлы, содержащие папку. Может принимать отдельные ID, массив с ID.\r\n * Если ничего не передано, обновляет узел, содержащий открытую папку.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.updateNodesWithFolder\r\n * @param folder ID папок.\r\n * @param callback Callback-функция.\r\n */\r\n updateNodesWithFolder: function (folderID, callback) {\r\n var me = this;\r\n var nodes = me._findNodesWithFolder(me._data, folderID);\r\n if (nodes.length > 0) {\r\n nodes.forEach(function (node) {\r\n me.updateByFolderID(node.id, callback);\r\n });\r\n } else {\r\n me.update();\r\n }\r\n },\r\n\r\n /**\r\n * Получить имя выбранной папки.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.getCurrentFolderName\r\n * @returns {string} Имя выбранной папки.\r\n */\r\n getCurrentFolderName: function () {\r\n var node = this._findNode(this._data, function (n) { return n.selected; });\r\n return node && node.caption;\r\n },\r\n\r\n /**\r\n * Установить отображаемое имя для папки.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.setFolderVisibleName\r\n * @param {int} id ИД папки.\r\n * @param {string} name Новое имя папки.\r\n */\r\n setFolderVisibleName: function (id, name) {\r\n var me = this;\r\n me._mapNodes(me._data, function (n) {\r\n if (n.id === id) {\r\n n.caption = name;\r\n }\r\n return n;\r\n });\r\n me._render(me._data);\r\n },\r\n\r\n /**\r\n * Обновить имя папки значением с сервера.\r\n *\r\n * @method WebAccess.components.wrappers.folderTree.FolderTree.updateFolderName\r\n * @param {int} id ИД папки.\r\n */\r\n updateFolderName: function (id) {\r\n var me = this;\r\n var nodes = me._findNodes(me._data, function (n) {\r\n return n.id == id;\r\n });\r\n\r\n if (nodes && nodes.length > 0) {\r\n WA.SRV.call('/Folder.asmx/GetName', { FolderID: id }).done(function (name) {\r\n nodes.forEach(function (node) {\r\n node.caption = name;\r\n });\r\n me._render(me._data);\r\n });\r\n }\r\n },\r\n\r\n /**************************************************************************************/\r\n /**\r\n * Возвращает массив узлов, содержащий путь к узлу с указанным ключом.\r\n * @param {string} key Ключ.\r\n * @param {Array} nodes Массив узлов.\r\n */\r\n _findNodePath: function (nodes, predicate) {\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (predicate(nodes[i])) {\r\n return [nodes[i]];\r\n } else {\r\n if (nodes[i].children && nodes[i].children.length > 0) {\r\n var nodesPath = this._findNodePath(nodes[i].children, predicate);\r\n if (nodesPath && nodesPath.length > 0) {\r\n nodesPath.push(nodes[i]);\r\n return nodesPath;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n\r\n /**\r\n * Ищет узел дерева с указанным ключом.\r\n * @param {Array} nodes Массив узлов.\r\n */\r\n _findNode: function (nodes, predicate) {\r\n var result = this._findNodes(nodes, predicate);\r\n return (result && result.length > 0) ? result[0] : null;\r\n },\r\n\r\n /**\r\n * Ищет узел дерева с указанным ключом.\r\n * @param {Array} nodes Массив узлов.\r\n */\r\n _findNodes: function (nodes, predicate) {\r\n var result = [];\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (predicate(nodes[i])) {\r\n result.push(nodes[i]);\r\n } else {\r\n if (nodes[i].children && nodes[i].children.length > 0) {\r\n var childNodes = this._findNodePath(nodes[i].children, predicate);\r\n if (childNodes && childNodes.length > 0) {\r\n result = result.concat(childNodes[0]);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n /**\r\n * Возвращает массив узлов, содержащих указанную папку.\r\n *\r\n * @param {Array} nodes Массив узлов.\r\n * @param {number} folderID ИД папки.\r\n * @returns {Array} Массив узлов с указанной папкой.\r\n */\r\n _findNodesWithFolder: function (nodes, folderID) { \r\n var me = this;\r\n var result = [];\r\n nodes.forEach(function (item) {\r\n if (item.children && item.children.length > 0) {\r\n var filteredNodes = item.children.filter(function (n) { return n.id == folderID; });\r\n if (filteredNodes.length > 0) {\r\n result.push(item);\r\n };\r\n\r\n var childNodes = me._findNodesWithFolder(item.children, folderID);\r\n if (childNodes.length > 0) {\r\n childNodes.forEach(function (n) {\r\n if (!result.some(function (el) { return el.id === n.id })) {\r\n result.push(n);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n return result;\r\n },\r\n\r\n /**\r\n * Преобразовывает указанные узлы.\r\n * @param {} nodes\r\n * @param {} changeFunc\r\n * @returns {}\r\n */\r\n _mapNodes: function (nodes, changeFunc) {\r\n for (var i = 0; i < nodes.length; i++) {\r\n nodes[i] = changeFunc(nodes[i]);\r\n if (nodes[i].children && nodes[i].children.length > 0) {\r\n this._mapNodes(nodes[i].children, changeFunc);\r\n }\r\n }\r\n\r\n return nodes;\r\n },\r\n\r\n /**\r\n * Инициирует перерисовку дерева.\r\n * @param {} state\r\n * @returns {}\r\n */\r\n _render: function (state) {\r\n ReactDOM.render(\r\n React.createElement(Component.FolderTree, { data: state, constants: { systemCode: g_SysCode, extension: g_ExtName } }),\r\n document.getElementById(this._containerId));\r\n },\r\n\r\n /**\r\n * Загружает содержимое узла.\r\n * @param {object} nodeInfo Информация об узле.\r\n * @param {function} onSuccess Callback при успешной загрузке.\r\n * @param {function} onFail Callback при ошибке.\r\n */\r\n loadNode: function (nodeInfo, onSuccess, onFail) {\r\n var me = this;\r\n if (me._data) {\r\n var node = me._findNode(me._data, function (n) {\r\n return n.key === nodeInfo.key;\r\n });\r\n\r\n if (node) {\r\n me._getNodeContent(node).done(function (res) {\r\n if (res) {\r\n var children = JSON.parse(res);\r\n node.hasChildren = (children.length > 0);\r\n node.children = children;\r\n\r\n if (onSuccess) onSuccess();\r\n if (!node.hasChildren) me._render(me._data);\r\n }\r\n }).fail(function (err) {\r\n log.error('FOLDER_TREE', err);\r\n if (onFail) onFail(err);\r\n });\r\n }\r\n\r\n }\r\n },\r\n\r\n /**\r\n * Выполняет запрос к сервису для загрузки содержимого узла.\r\n * @param {object} node Узел.\r\n * @returns {$.Deferred} Deferred-объект загрузки.\r\n */\r\n _getNodeContent: function (node) {\r\n var selectedNode = this._findNode(this._data, function (n) { return n.selected; });\r\n return WA.SRV.call('/FolderList.asmx/LoadTree', {\r\n FolderID: node.id,\r\n FolderPath: node.key,\r\n SelectedTreeItem: selectedNode ? selectedNode.key : ''\r\n });\r\n },\r\n\r\n /**\r\n * Раскрывает или сворачивает узел.\r\n * @param {object} node Информация об узле.\r\n */\r\n toggleNode: function (node) {\r\n this._mapNodes(this._data, function (n) {\r\n if (n.key === node.key) {\r\n n.expanded = !n.expanded;\r\n WA.SRV.call('/FolderList.asmx/SaveOpened', {\r\n IsOpening: n.expanded,\r\n FolderPath: node.key\r\n }, null, null, true, true); // не показываем ошибки\r\n } else if (node.key.indexOf(n.key) !== -1) {\r\n n.expanded = true; //раскрываем родителя\r\n }\r\n return n;\r\n });\r\n this._render(this._data);\r\n },\r\n\r\n /**\r\n * Всегда раскрывает узел\r\n * @param {object} node Информация об узле.\r\n */\r\n openNode: function (node) {\r\n this._mapNodes(this._data, function (n) {\r\n if (n.key === node.key) {\r\n n.expanded = true;\r\n WA.SRV.call('/FolderList.asmx/SaveOpened', {\r\n IsOpening: n.expanded,\r\n FolderPath: node.key\r\n }, null, null, true, true); // не показываем ошибки\r\n } else if (node.key.indexOf(n.key) !== -1) {\r\n n.expanded = true; //раскрываем родителя\r\n }\r\n return n;\r\n });\r\n this._render(this._data);\r\n },\r\n\r\n /**\r\n * Строит url для папки.\r\n * @private\r\n * @param {object} node Информация об узле.\r\n * @returns {string} Строка URL.\r\n */\r\n _buildFolderUrl(node) {\r\n let url = new WA.URL('Explorer.aspx');\r\n url\r\n .setParam('sys', g_SysCode)\r\n .setParam('ext', g_ExtName)\r\n .setParam('id', node.id);\r\n\r\n if (node.key) {\r\n url.setParam('fpath', node.key);\r\n }\r\n if (node.treeitem) {\r\n url.setParam('treeitem', node.treeitem);\r\n }\r\n if (node.folderMode) {\r\n url.setParam(window.FOLDER_GRID.FOLDER_MODE_URL_PARAM, node.folderMode);\r\n }\r\n\r\n return url.asString();\r\n }\r\n\r\n });\r\n\r\n global.components.wrappers.folderTree.FolderTree = FolderTree;\r\n\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n/**\r\n* Встроенная подсказка\r\n*\r\n* @class WebAccess.components.notifications.InlineHint\r\n* @extends BaseObject\r\n* @param {object} [opt_settings] Параметры подсказки\r\n* @param {Integer} [opt_dialogId] ИД подсказки\r\n* @since 5.0.0.7300\r\n*\r\n* @example\r\n* var hint = new WA.CMP.NTF.InlineHint()\r\n* hint.showError(\"Hello world\");\r\n*/\r\n(function (global) {\r\n var InlineHint = BaseObject.extend({\r\n _dialogId: 0,\r\n _customDialogId: false,\r\n init: function (opt_settings, opt_dialogId) {\r\n this._super(opt_settings);\r\n this._dialogId = opt_dialogId;\r\n if (opt_dialogId) this._customDialogId = true;\r\n if ($.isPlainObject(opt_settings)) {\r\n $.extend(this, opt_settings);\r\n };\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n className: 'InlineHint',\r\n\r\n /**\r\n * Показать встроенную подсказку с предупреждением.\r\n *\r\n * @function WebAccess.components.notifications.InlineHint#showWarning\r\n * @param {string} title Основной текст предупреждения\r\n * @param {string} [description] Информационный текст, объясняющий суть предупреждения\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority = INLINE_HINT_PRIORITY.PRIMARY] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint.\r\n * @since 5.0.0.7300\r\n */\r\n showWarning(title, description, inlineHintPriority = INLINE_HINT_PRIORITY.PRIMARY) {\r\n const inlineHintParams = {\r\n description,\r\n priority: inlineHintPriority,\r\n type: MESSAGE_TYPE.WARNING,\r\n }; \r\n return this.show(title, inlineHintParams);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать встроенную подсказку с текстом ошибки.\r\n *\r\n * @function WebAccess.components.notifications.InlineHint#showError\r\n * @param {string} title Основной текст ошибки\r\n * @param {string} [description] Информационный текст, объясняющий ошибку\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority = INLINE_HINT_PRIORITY.PRIMARY] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint.\r\n */\r\n showError(title, description, inlineHintPriority = INLINE_HINT_PRIORITY.PRIMARY) {\r\n const inlineHintParams = {\r\n description,\r\n priority: inlineHintPriority,\r\n type: MESSAGE_TYPE.ERROR,\r\n };\r\n return this.show(title, inlineHintParams);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Показать встроенную подсказку с информационным сообщением.\r\n *\r\n * @method WebAccess.components.notifications.InlineHint#showInfo\r\n * @param {string} title Основной текст сообщения\r\n * @param {string} [description] Информационный текст, объясняющий суть сообщения\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint.\r\n * @since 5.1.0.1511\r\n */\r\n showInfo(title, description, inlineHintPriority) {\r\n const inlineHintParams = {\r\n description,\r\n priority: inlineHintPriority,\r\n type: MESSAGE_TYPE.INFO,\r\n };\r\n return this.show(title, inlineHintParams);\r\n },\r\n\r\n /**\r\n * Показать подсказку в указанном контейнере\r\n * @function WebAccess.components.notifications.InlineHint#showInContainer\r\n * @param {string} containerSelector Селектор контейнера для сообщения\r\n * @param {string} title Основной текст сообщения\r\n * @param {string} [description] Информационный текст\r\n * @param {MESSAGE_TYPE} [messageType] Тип сообщения\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint\r\n */\r\n showInContainer(containerSelector, title, description, messageType, inlineHintPriority) {\r\n const inlineHintParams = {\r\n containerSelector,\r\n description,\r\n priority: inlineHintPriority,\r\n type: messageType,\r\n };\r\n return this.show(title, inlineHintParams);\r\n }, \r\n\r\n /**\r\n * Показать подсказку в диалоге\r\n * @function WebAccess.components.notifications.InlineHint#showInDialog\r\n * @param {string} dialogId Идентификатор целевого диалога\r\n * @param {string} title Основной текст сообщения\r\n * @param {string} [description] Информационный текст\r\n * @param {MESSAGE_TYPE} [messageType] Тип сообщения\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint\r\n */\r\n showInDialog(dialogId, title, description, messageType, inlineHintPriority) {\r\n this._dialogId = dialogId;\r\n this._customDialogId = true;\r\n const inlineHintParams = {\r\n description,\r\n priority: inlineHintPriority,\r\n type: messageType,\r\n };\r\n return this.show(title, inlineHintParams);\r\n },\r\n\r\n _updateContext: function () {\r\n if (this._customDialogId) return;\r\n\r\n this._dialogId = null;\r\n\r\n var jDialog = $('.ui-dialog-content').last();\r\n if (!jDialog.length) return;\r\n var jDialogContent = jDialog.children();\r\n if (jDialogContent.length) {\r\n this._dialogId = jDialogContent.attr('id');\r\n if (typeof this._dialogId !== 'undefined') {\r\n this._dialogId = this._dialogId.replace('dialog_content_', '');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Сформировать модель встроенной подсказки.\r\n *\r\n * @method WebAccess.components.notifications.InlineHint#_prepareHintModel\r\n * @param {...*} args Аргументы метода show, из которых будет формироваться модель встроенной подсказки\r\n * @private\r\n * @return {Object} Модель встроенной подсказки.\r\n * @since 5.7.0.2201\r\n */\r\n _prepareHintModel(...args) {\r\n let hintModel = {};\r\n\r\n // Начиная с версии 5.6 метод show нужно вызывать так: show(title, params);\r\n if ((!args[1] || typeof args[1] !== 'object') && args.length >= 2) {\r\n // Приводим аргументы в современный вид и сообщаем о том, что по-старому пользоваться не рекомендуется\r\n this._warnAboutDeprecatedMethod('WA.CMP.NTF.InlineHint.show', 'Устаревший вариант использования аргументов метода {0}');\r\n hintModel = {\r\n description: args[1],\r\n priority: args[3],\r\n type: args[2],\r\n };\r\n } else {\r\n if (args[1]) {\r\n hintModel = args[1];\r\n // Раньше вместо description был message\r\n if (typeof hintModel.message === 'string') {\r\n this._warnAboutDeprecatedMethod('WA.CMP.NTF.InlineHint.show', 'Устаревший вариант использования аргументов метода {0}');\r\n hintModel.description = hintModel.message;\r\n delete hintModel.message;\r\n }\r\n }\r\n }\r\n\r\n // Устанавливаем значения по умолчанию.\r\n if (typeof hintModel.description !== 'string') {\r\n hintModel.description = '';\r\n }\r\n if (!Object.values(INLINE_HINT_PRIORITY).includes(hintModel.priority)) {\r\n hintModel.priority = INLINE_HINT_PRIORITY.SECONDARY;\r\n }\r\n if (!Object.values(MESSAGE_TYPE).includes(hintModel.type)) {\r\n hintModel.type = MESSAGE_TYPE.ERROR;\r\n }\r\n\r\n let title = args[0].toString();\r\n\r\n\r\n // Пробуем распарсить JSON, на случай, если в метод первым параметром был передан JSON-объект\r\n try {\r\n let jsonObject = JSON.parse(title);\r\n if (jsonObject.Message) {\r\n title = jsonObject.Message;\r\n }\r\n } catch (e) {\r\n // Игнорируем, если title не является JSON-объектом\r\n }\r\n\r\n title.trim().replace(/\\n/g, '
    ').replaceAll(\"\\u0026quot;\", '\"');\r\n\r\n if (title.includes('^')) {\r\n const splitterIndex = title.indexOf('^');\r\n hintModel.description = title.substring(splitterIndex + 1).fromISBuilderToNormal();\r\n title = title.substring(0, splitterIndex);\r\n }\r\n\r\n hintModel.title = title;\r\n\r\n return hintModel;\r\n },\r\n\r\n /**\r\n * Показать встроенную подсказку.\r\n *\r\n * @method WebAccess.components.notifications.InlineHint#show\r\n * @param {string} title Основной текст сообщения\r\n * @param {string} [params = {}] Дополнительные параметры\r\n * @param {string} [params.containerSelector] Селектор контейнера для сообщения\r\n * @param {string} [params.description = ''] Информационный текст\r\n * @param {string} [params.priority = INLINE_HINT_PRIORITY.SECONDARY] Приоритет встроенной подсказки\r\n * @param {string} [params.type = MESSAGE_TYPE.ERROR] Тип сообщения\r\n * подсказки @deprecated since 5.6.0.9069\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint.\r\n */\r\n show(title, params = {}) {\r\n // Подготавливаем модель подсказки\r\n let hintModel = this._prepareHintModel(...arguments);\r\n\r\n this._updateContext();\r\n\r\n if (!hintModel.title) {\r\n return this;\r\n }\r\n\r\n const templateParams = {\r\n cssClass: (hintModel.priority === INLINE_HINT_PRIORITY.SECONDARY) ? ' inline-hint_priority_secondary' : '',\r\n description: hintModel.description,\r\n title: hintModel.title,\r\n type: Object.keys(MESSAGE_TYPE)[hintModel.type].toLowerCase(),\r\n };\r\n\r\n WA.TMPL.render('components/inlineHint.compile.html', templateParams).done((html) => { \r\n // Прячем предыдущую подсказку с таким же inlineHintPriority\r\n this.hide(hintModel.priority); \r\n \r\n // Находим контейнер ошибки в DOM, в которм будем рендерить inline-hint\r\n let jContainer = hintModel.containerSelector ? $(hintModel.containerSelector) : {};\r\n if (!jContainer.length) {\r\n const defaultContainerSelectors = Object.freeze([\r\n `#dialog_content_${this._dialogId}:visible`, // В диалоге\r\n '.preview-container__inline-hint', // В предпросмотре\r\n '#ctl00_MainContent_ErrorContainer', // В карточках и в МД\r\n '[name=\"ErrorControl\"]', // В проводнике\r\n '#right_column', // Неизвестно где, оставлено лишь бы чего не сломать\r\n ]);\r\n for (const defaultContainerSelector of defaultContainerSelectors) {\r\n jContainer = $(defaultContainerSelector);\r\n if (jContainer.length) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Добавляем inline-hint с низким приоритетом после inline-hint'а с высоким приоритетом\r\n const jErrorContainerPrimary = jContainer.find('.inline-hint').not('.inline-hint_priority_secondary');\r\n if (jErrorContainerPrimary.length) {\r\n jErrorContainerPrimary.after(html);\r\n } else {\r\n jContainer.prepend(html);\r\n }\r\n\r\n // Получаем только что добавленный inline-hint\r\n let jCurrentErrorContainer;\r\n switch (hintModel.priority) {\r\n case INLINE_HINT_PRIORITY.PRIMARY:\r\n jCurrentErrorContainer = jContainer.find('.inline-hint').not('.inline-hint_priority_secondary');\r\n break;\r\n case INLINE_HINT_PRIORITY.SECONDARY:\r\n jCurrentErrorContainer = jContainer.find('.inline-hint_priority_secondary');\r\n }\r\n\r\n // Навешиваем событые удаления inline-hint при нажатии на крестик\r\n jCurrentErrorContainer.find('.inline-hint__close').on('click', () => {\r\n this.hide(hintModel.priority);\r\n });\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть последнее открытое сообщение.\r\n *\r\n * @function WebAccess.components.notifications.InlineHint#hide\r\n * @param {INLINE_HINT_PRIORITY} [inlineHintPriority] Приоритет встроенной подсказки\r\n * @return {WebAccess.components.notifications.InlineHint} Объект типа InlineHint.\r\n * @since 5.0.0.7300\r\n */\r\n hide(inlineHintPriority = null) {\r\n switch (inlineHintPriority) {\r\n case INLINE_HINT_PRIORITY.PRIMARY:\r\n $('.inline-hint').not('.inline-hint_priority_secondary').remove();\r\n break;\r\n case INLINE_HINT_PRIORITY.SECONDARY:\r\n $('.inline-hint_priority_secondary').remove();\r\n break;\r\n default:\r\n global.InlineHint.hideAll();\r\n }\r\n return this;\r\n },\r\n\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n global.InlineHint = InlineHint;\r\n\r\n /**\r\n * Скрыть все сообщения.\r\n *\r\n * @function WebAccess.components.notifications.InlineHint#hideAll\r\n * @static\r\n * @since 5.0.0.7300\r\n */\r\n global.InlineHint.hideAll = function () {\r\n $('.inline-hint').add('.error_div_msg').add('#error_container').remove();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n})(window.WebAccess.components.notifications);","'use strict';\r\n\r\n(function (global) {\r\n /**\r\n * Класс встроенной подсказки.\r\n *\r\n * @class WebAccess.components.notifications.ReactInlineHint\r\n * @extend BaseReactObject\r\n * @since 5.6.0.1300\r\n */\r\n class ReactInlineHint extends BaseReactObject {\r\n static get EVENT() {\r\n // Событие, срабатывающее при изменении модели встроенной подсказки.\r\n return Object.assign(\r\n {},\r\n BaseReactObject.EVENT,\r\n {\r\n CHANGE_STATE: 'ReactInlineHintChange',\r\n },\r\n );\r\n }\r\n /**\r\n * Конструктор.\r\n *\r\n * @ignore\r\n * @method WebAccess.components.notifications.ReactInlineHint#init\r\n * @param {object} model Модель панели действий.\r\n * @override\r\n * @see BaseReactObject#init\r\n */\r\n constructor (model) {\r\n super(model);\r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.notifications.ReactInlineHint#className\r\n * @override\r\n * @see BaseReactObject#className\r\n */\r\n this.className = 'ReactInlineHint';\r\n this._model.extended = {\r\n hide: () => {\r\n this.hide();\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Показывает встроенную подсказку с предупреждением.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#showWarning\r\n * @param {string} title Основной текст предупреждения.\r\n * @param {string} [description = ''] Текст, объясняющий суть предупреждения.\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n showWarning(title, description = '') {\r\n const inlineHintParams = {\r\n description,\r\n type: MESSAGE_TYPE.WARNING,\r\n };\r\n return this.show(title, inlineHintParams);\r\n }\r\n\r\n /**\r\n * Показывает встроенную подсказку с текстом ошибки.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#showError\r\n * @param {string} title Основной текст ошибки.\r\n * @param {string} [description = ''] Текст, объясняющий причину ошибки.\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n showError(title, description = '') {\r\n const inlineHintParams = {\r\n description,\r\n type: MESSAGE_TYPE.ERROR,\r\n };\r\n return this.show(title, inlineHintParams);\r\n }\r\n\r\n /**\r\n * Показывает встроенную подсказку с информационным сообщением.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#showInfo\r\n * @param {string} title Основной текст сообщения.\r\n * @param {string} [description = ''] Текст, объясняющий суть подсказки.\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n showInfo(title, description = '') {\r\n const inlineHintParams = {\r\n description,\r\n type: MESSAGE_TYPE.INFO,\r\n };\r\n return this.show(title, inlineHintParams);\r\n }\r\n\r\n /**\r\n * Показывает подсказку в диалоге.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#showInDialog\r\n * @param {string} dialogId ИД диалога.\r\n * @param {string} description Основной текст подсказки.\r\n * @param {string} [details = ''] Дополнительная информация.\r\n * @param {MESSAGE_TYPE} [messageType] Тип сообщения.\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n showInDialog(dialogId, description, details = '', messageType) {\r\n // В диалогах нет \"реактивного\" сообщения об ошибке\r\n // Используем обычное сообщение об ошибке\r\n (new global.InlineHint()).showInDialog(dialogId, description, details, messageType);\r\n return this;\r\n }\r\n\r\n /**\r\n * Сформировать модель встроенной подсказки.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#_prepareHintModel\r\n * @param {...*} args Аргументы метода show, из которых будет формироваться модель встроенной подсказки\r\n * @private\r\n * @since 5.7.0.2201\r\n */\r\n _prepareHintModel(...args) {\r\n\r\n // Начиная с версии 5.6 метод show нужно вызывать так: show(title, params);\r\n if (typeof args[1] !== 'object' && args.length >= 2) {\r\n // Приводим аргументы в современный вид и сообщаем о том, что по-старому пользоваться не рекомендуется\r\n this._warnAboutDeprecatedMethod('WA.CMP.NTF.InlineHint.show', 'Устаревший вариант использования аргументов метода {0}');\r\n Object.assign(this._model, {\r\n description: args[1],\r\n priority: args[3],\r\n type: args[2],\r\n });\r\n } else {\r\n Object.assign(this._model, args[1]);\r\n // Раньше вместо description был message\r\n if (typeof this._model.message === 'string') {\r\n this._warnAboutDeprecatedMethod('WA.CMP.NTF.InlineHint.show', 'Устаревший вариант использования аргументов метода {0}');\r\n this._model.description = this._model.message;\r\n delete this._model.message;\r\n }\r\n }\r\n\r\n // Устанавливаем значения по умолчанию.\r\n if (typeof this._model.description !== 'string') {\r\n this._model.description = '';\r\n }\r\n if (!Object.values(INLINE_HINT_PRIORITY).includes(this._model.priority)) {\r\n this._model.priority = INLINE_HINT_PRIORITY.SECONDARY;\r\n }\r\n if (!Object.values(MESSAGE_TYPE).includes(this._model.type)) {\r\n this._model.type = MESSAGE_TYPE.ERROR;\r\n }\r\n\r\n let title = args[0].toString();\r\n\r\n // Пробуем распарсить JSON, на случай, если в метод первым параметром был передан JSON-объект\r\n try {\r\n let jsonObject = JSON.parse(title);\r\n if (jsonObject.Message) {\r\n title = jsonObject.Message;\r\n }\r\n } catch (e) {\r\n // Игнорируем, если title не является JSON-объектом\r\n }\r\n\r\n title.trim().replace(/\\n/g, '
    ').replaceAll(\"\\u0026quot;\", '\"');\r\n\r\n if (title.includes('^')) {\r\n const splitterIndex = title.indexOf('^');\r\n this._model.description = title.substring(splitterIndex + 1).fromISBuilderToNormal();\r\n title = title.substring(0, splitterIndex);\r\n }\r\n\r\n this._model.title = title;\r\n }\r\n\r\n /**\r\n * Показывает встроенную подсказку.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#show\r\n * @param {string} title Основной текст подсказки.\r\n * @param {string} [params = {}] Дополнительные параметры\r\n * @param {string} [params.description = ''] Информационный текст\r\n * @param {string} [params.priority = INLINE_HINT_PRIORITY.SECONDARY] Приоритет встроенной подсказки\r\n * @param {string} [params.type = MESSAGE_TYPE.ERROR] Тип сообщения\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n show(title, params = {}) {\r\n // Подготавливаем модель подсказки\r\n this._prepareHintModel(...arguments);\r\n this.fire(this.constructor.EVENT.CHANGE_STATE, this._model);\r\n return this;\r\n }\r\n\r\n /**\r\n * Скрывает встроенную подсказку.\r\n *\r\n * @method WebAccess.components.notifications.ReactInlineHint#hide\r\n * @returns {WebAccess.components.notifications.ReactInlineHint} Текущий объект сообщения.\r\n */\r\n hide() {\r\n for (let key in this._model) {\r\n if (this._model.hasOwnProperty(key) && key !== 'extended') {\r\n delete this._model[key];\r\n }\r\n }\r\n\r\n this.fire(this.constructor.EVENT.CHANGE_STATE, this._model);\r\n return this;\r\n }\r\n }\r\n\r\n global.ReactInlineHint = ReactInlineHint;\r\n\r\n})(window.WebAccess.components.notifications);","'use strict';\r\n\r\n/** Время одной полной итерации анимации, мс. */\r\nconst SPIN_TIME_MS = 800;\r\n/** jQuery-селектор спиннера. */\r\nconst SPINNER_SELECTOR = '.loader';\r\n/** Класс отображенного спиннера. */\r\nconst VISIBLE_SPINNER_CLASS_NAME = 'loader_animated';\r\n\r\n// ToDo: перенести на wiki как пример использования jsdoc.\r\n/**\r\n * Спиннер.\r\n *\r\n * @memberOf WebAccess.components.notifications\r\n */\r\nWebAccess.components.notifications.Spinner = class {\r\n /**\r\n * Видимость спиннера.\r\n *\r\n * @name Spinner#isVisible\r\n * @type boolean\r\n * @readonly\r\n * @return {boolean} True - спиннер видимый, иначе False.\r\n */\r\n get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n /**\r\n * Создает объект Spinner.\r\n *\r\n * @param {object} [jSpinner = $(SPINNER_SELECTOR)] jQuery-объект спиннера.\r\n */\r\n constructor(jSpinner = $(SPINNER_SELECTOR)) {\r\n /**\r\n * jQuery-объект спиннера.\r\n * @type {object}\r\n */\r\n this.jSpinner = jSpinner;\r\n /**\r\n * ИД таймера.\r\n * @type {number}\r\n */\r\n this.timer = null;\r\n /**\r\n * Штамп времени последнего запуска.\r\n * @type {number}\r\n */\r\n this.lastTimestamp = 0;\r\n /**\r\n * Признак видимости спиннера.\r\n * @private\r\n * @type {boolean}\r\n * @default false\r\n */\r\n this._isVisible = false;\r\n }\r\n\r\n /**\r\n * Запуск анимации спиннера.\r\n *\r\n * @method Spinner#_start\r\n * @private\r\n * @since 5.0.0.7300\r\n */\r\n _start() {\r\n this.jSpinner.removeClass(VISIBLE_SPINNER_CLASS_NAME);\r\n setTimeout(() => {\r\n this.lastTimestamp = Date.now();\r\n this.jSpinner.addClass(VISIBLE_SPINNER_CLASS_NAME);\r\n }, 0);\r\n return this;\r\n }\r\n\r\n /**\r\n * Отложенный запуск анимации процесса загрузки.\r\n *\r\n * @deprecated\r\n * @method Spinner#showDelayed\r\n * @param {number} [delay = 500] Задержка запуска анимации в миллисекундах.\r\n * @return {WebAccess.components.notifications.Spinner} Объект типа Spinner.\r\n * @since 5.0.0.7300\r\n */\r\n showDelayed(delay = 500) {\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n this.timer = setTimeout(() => {\r\n this._start();\r\n }, delay);\r\n return this;\r\n }\r\n\r\n /**\r\n * Прекратить отобржение анимации спиннера.\r\n *\r\n * @method Spinner#_stop\r\n * @return {WebAccess.components.notifications.Spinner} Объект типа Spinner.\r\n * @since 5.0.0.7300\r\n */\r\n _stop() {\r\n setTimeout(() => {\r\n let timeDiff = Date.now() - this.lastTimestamp;\r\n let animationStopTimeout = Math.max(Math.ceil(timeDiff / SPIN_TIME_MS) * SPIN_TIME_MS - timeDiff, 0);\r\n\r\n setTimeout((lastTimestamp) => {\r\n if (!lastTimestamp || lastTimestamp === this.lastTimestamp) {\r\n this.jSpinner.removeClass(VISIBLE_SPINNER_CLASS_NAME);\r\n }\r\n }, animationStopTimeout, this.lastTimestamp);\r\n return this;\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Показать анимацию процесса загрузки.\r\n *\r\n * @method Spinner#show\r\n * @return {WebAccess.components.notifications.Spinner} Объект типа Spinner.\r\n * @since 5.0.0.7300\r\n */\r\n show() {\r\n if (!this.jSpinner.length) {\r\n this.jSpinner = $(SPINNER_SELECTOR);\r\n }\r\n\r\n // показываем спиннер, если не открыто модальное окно\r\n if (!window.IsModalShown()) {\r\n this._isVisible = true;\r\n this._start();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Показать анимацию процесса загрузки в диалоговом окне.\r\n *\r\n * @method Spinner#showInDialog\r\n * @param {number} [delay] Задержка запуска анимации в миллисекундах\r\n * @return {WebAccess.components.notifications.Spinner} Объект типа Spinner.\r\n * @since 5.0.0.7300\r\n */\r\n showInDialog(delay) {\r\n let jDialog = $('.ui-dialog:visible, .wizard-form:visible');\r\n jDialog.append('
    ');\r\n let jDialogSpinner = jDialog.find('.ui-dialog-loader');\r\n this.jSpinner = jDialogSpinner;\r\n\r\n if (delay) {\r\n this.showDelayed(delay);\r\n } else {\r\n this.show();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Скрыть анимацию процесса загрузки.\r\n *\r\n * @method Spinner#hide\r\n * @param {String} [message] Сообщение о завершении процесса загрузки.\r\n * @param {number} [delay] Задержка запуска анимации в миллисекундах\r\n * @param {number} [callback] Функция, которая будет запущена после скрытия анимации.\r\n * @return {WebAccess.components.notifications.Spinner} Объект типа Spinner.\r\n * @since 5.0.0.7300\r\n */\r\n hide(message, delay, callback) {\r\n this._isVisible = false;\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n if (message) {\r\n let toast = new WA.CMP.NTF.Toast();\r\n toast.show(message, 'success', null, delay);\r\n }\r\n if (callback instanceof Function) {\r\n setTimeout(() => {\r\n callback();\r\n }, delay);\r\n }\r\n this._stop();\r\n return this;\r\n }\r\n};\r\n","\"use strict\";\n\n\n(function (global) {\n\n /**\n * Предоставляет дополнительные методы для работы с реквизитами. \n *\n * @mixin WebAccess.mixins.requisitesMixin\n * @since 5.0.0.7100 \n */\n var requisitesMixin = {\n\n /**\n * Ассоциация класса реквизита по его типу.\n *\n * @method WebAccess.mixins.requisitesMixin._createRequisite\n * @private\n * @since 5.0.0.7100\n * @return {Object}\n */\n _createRequisite: function (reqName, reqData, opt_isDetail, opt_grid) {\r\n var REQ;\n\n if (opt_isDetail)\n var REQ = WA.CMP.wrappers.form.requisites._details;\n else {\r\n var REQ = WA.CMP.wrappers.form.requisites;\r\n }\n\n switch (reqData.type) {\r\n case \"string\":\n case \"text\": \n return new REQ.Text(reqName, reqData, this, opt_grid);\n case \"pick\":\n return new REQ.Pick(reqName, reqData, this, opt_grid);\n case \"date\":\n return new REQ.Date(reqName, reqData, this, opt_grid);\n case \"integer\":\n case \"largeinteger\":\n case \"float\":\n return new REQ.Integer(reqName, reqData, this, opt_grid);\n case \"reference\":\n return new REQ.Reference(reqName, reqData, this, opt_grid);\n case \"document\":\n return new REQ.Document(reqName, reqData, this, opt_grid);\n case \"radio\":\n return new REQ.Radio(reqName, reqData, this, opt_grid);\n case \"checkbox\":\n return new REQ.CheckBox(reqName, reqData, this, opt_grid);\n case \"objectList\":\n return new REQ.ObjectList(reqName, reqData, this, opt_grid);\n default:\n return new REQ.BaseRequisite(reqName, reqData, this, opt_grid);\r\n };\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Начальное заполнение реквизитов формы данными.\n *\n * @method WebAccess.mixins.requisitesMixin._initRequisiteValues\n * @private\n * @since 5.0.0.7100\n * @return {WebAccess.mixins.requisitesMixin}\n */\n _initRequisiteValues: function (reqsData) {\r\n var me = this;\n\n if (me.isDisabled()) {\r\n me.disable();\r\n } else {\n //Шамов А.: Закоментировал потому, что дизэйблятся все контролы реквизита на всех вкладках, если на какой-нибуль из вкладок реквизит задизэйблен.\n //me._disableReadOnlyFields();\n }\n\n var globalReqValuesInit = $.Deferred();\n if (me._reqValuesInit) me._reqValuesInit.push(globalReqValuesInit);\n\n for (var reqName in reqsData) {\r\n if (me.requisites[reqName].isRendered()) {\r\n (function (_reqName, req) {\r\n\n var currReqValueInit = $.Deferred();\n if (me._reqValuesInit) me._reqValuesInit.push(currReqValueInit);\n\n $.when(req.Init).then(function () {\r\n req.setValue(reqsData[_reqName].value, reqsData[_reqName].displayValue, false)._bindMirrors()._isChanged = false;\n currReqValueInit.resolve();\r\n });\r\n\n })(reqName, me.requisites[reqName]);\r\n }\r\n };\n\n UnbindBeforeUnload();\n BindBeforeUnload();\n\n $(\"input.input\").change(function () { $(this).attr(\"title\", $(this).val()) });\n\n globalReqValuesInit.resolve();\n\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Свзяать реквизиты с множественными контролами\n * @private\n * @method WebAccess.mixins.requisitesMixin._disable\n * @since 5.0.0.7100\n */\n _bindMirrors: function (reqsData) {\r\n for (var reqName in reqsData) {\r\n if (this.requisites[reqName].isRendered()) {\r\n this.requisites[reqName]._bindMirrors();\r\n }\r\n }\n return this;\r\n },\n\n /**\n * Установить для всех реквизитов состояние \"Только чтение\", \n * и скрыть ссылку \"Добавить строку\".\n *\n * @method WebAccess.mixins.requisitesMixin._disable\n * @private\n * @since 5.0.0.7100\n * @return {WebAccess.mixins.requisitesMixin}\n */\n _disable: function () {\r\n var reqs = this.requisites.toArray();\n reqs.forEach(function (requisite) {\r\n requisite._disableControls();\r\n });\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Снять у всех реквизитов состояние \"Только чтение\".\n *\n * @method WebAccess.mixins.requisitesMixin._enable\n * @private\n * @since 5.0.0.7100\n * @return {WebAccess.mixins.requisitesMixin}\n */\n _enable: function () {\r\n var reqs = this.requisites.toArray();\n var parentTable = this._parentTable;\n if (parentTable) {\n var columns = parentTable.columns;\n reqs.forEach(function (requisite) {\n var reqName = requisite.name;\n var currentColumn = columns[reqName];\n if (!currentColumn.isDisabled()) {\n requisite._enableControls();\n }\n });\n } else {\n reqs.forEach(function (requisite) {\n requisite._enableControls();\n });\n }\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Используется при иницалиции формы - отключает все видимые \n * поля для которых доступ только на чтение.\n *\n * @method WebAccess.mixins.requisitesMixin._disableReadOnlyFields\n * @private\n * @since 5.0.0.7100\n * @return {WebAccess.mixins.requisitesMixin}\n */\n _disableReadOnlyFields: function () {\r\n var reqs = this.requisites.toArray();\n var parentTable = this._parentTable;\n if (parentTable) {\n var columns = parentTable.columns;\n reqs.forEach(function (requisite) {\n var reqName = requisite.name;\n var currentColumn = columns[reqName];\n if (currentColumn.isDisabled()) {\n requisite.disable();\n }\n });\n } else {\n reqs.forEach(function (requisite) {\n if (requisite.isDisabled()) requisite.enable();\n });\n }\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Возвращает реквизит по ИД элемента управления.\n *\n * @method WebAccess.mixins.requisitesMixin.getRequisiteByControlId\n * @param {string} controlId ИД HTML-элемента\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Объект реквизита или значение null, если реквизит не найден.\n * @since 5.0.0.7100\n */\n getRequisiteByControlId: function (controlId) {\r\n var reqs = this.requisites.toArray();\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n var req = reqs[reqI];\n for (var i = 0; i < req.controlsIds.length; i++) {\r\n if (controlId === req.controlsIds[i]) {\r\n return req;\r\n }\r\n }\r\n }\n return null;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Признак изменения реквизитов.\n *\n * @method WebAccess.mixins.requisitesMixin.isChanged\n * @return {boolean} True – реквизиты были изменены, иначе False.\n * @since 5.0.0.7100\n */\n isChanged: function () {\r\n var reqs = this.requisites.toArray();\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n if (reqs[reqI].isChanged()) {\r\n return true;\r\n }\r\n }\n return false;\r\n }\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n };\n\n global.requisitesMixin = requisitesMixin;\r\n})(window.WebAccess.mixins);","\"use strict\";\r\n\r\n/** \r\n* Коллекция реквизитов.\r\n*\r\n* @class WebAccess.components.wrappers.form.RequisiteCollection\r\n* @extends WebAccess.Collection\r\n* @since 5.2.0.1900\r\n*/\r\n\r\n(function (global) {\r\n\r\n var RequisiteCollection = global.Collection.extend({\r\n className: 'RequisiteCollection',\r\n \r\n /**\r\n * Значение всех реквизитов в виде словоря.\r\n *\r\n * @method WebAccess.components.wrappers.form.RequisiteCollection.toDictionary\r\n * @return {Object} Значение всех реквизитов.\r\n * @since 5.2.0.1900\r\n */\r\n toDictionary: function () {\r\n var resultDict = {};\r\n var reqs = this.toArray();\r\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n resultDict[reqs[reqI].name] = reqs[reqI].getValue();\r\n }\r\n return resultDict;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n });\r\n\r\n global.components.wrappers.form.RequisiteCollection = RequisiteCollection;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Базовый класс строк и столбцов таблицы. \r\n* Содержит общие методы.\r\n* \r\n* @class WebAccess.components.wrappers.form.BaseTableLine\r\n* @abstract\r\n* @extends BaseObject\r\n* @param {string} itemSelector существующий элемент страницы\r\n* @param {WebAccess.components.wrappers.form.Table} parentTable Таблица, которой принадлежит строка или столбец\r\n*/\r\n(function (global) {\r\n\r\n var BaseTableLine = BaseObject.extend([global.mixins.requisitesMixin], {\r\n className: \"BaseTableLine\",\r\n\r\n _parentTable: null,\r\n _isDisabled: false,\r\n _jDataItems: null,\r\n\r\n init: function (itemSelector, parentTable) {\r\n var me = this;\r\n me._super(itemSelector);\r\n me._jObject = $(itemSelector);\r\n me._parentTable = parentTable;\r\n me._isDisabled = parentTable.isDisabled();\r\n },\r\n\r\n /**\r\n * Признак недоступности строки для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#isDisabled\r\n * @return {boolean} True – строка доступна только для чтения , иначе False.\r\n */\r\n isDisabled: function () {\r\n return this._isDisabled;\r\n },\r\n\r\n /**\r\n * Cделать элемент недоступным.\r\n * Делает недоступными вложенные в элемент реквизиты. \r\n * Реквизитам присваивается атрибут «Только чтение».\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#disable\r\n * @return {WebAccess.components.wrappers.form.BaseTableLine} Объект типа BaseTableLine.\r\n */\r\n disable: function () {\r\n this._disable();\r\n this._isDisabled = true;\r\n this.fire('disable');\r\n return this;\r\n },\r\n\r\n /**\r\n * Cделать элемент доступным.\r\n * Делает доступными вложенные в элемент реквизиты. С реквизитов убирается атрибут «Только чтение».\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#enable\r\n * @return {WebAccess.components.wrappers.form.BaseTableLine} Объект типа BaseTableLine.\r\n */\r\n enable: function () {\r\n this._enable();\r\n this._isDisabled = false;\r\n this.fire('enable');\r\n return this;\r\n },\r\n\r\n /**\r\n * Cкрыть элемент.\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#hide\r\n * @return {WebAccess.components.wrappers.form.BaseTableLine} Объект типа BaseTableLine.\r\n */\r\n //FIXME: Shabardin_PI: WA.CR.form.controls.tables.STcxGrid1.columns[\"НомСтр\"].hide() - большая печаль с заголовками и с таблицей в целом при скрытии столбца.\r\n hide: function () {\r\n var me = this;\r\n _(me.requisites.toArray()).each(function (req) {\r\n req.hide();\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отобразить элемент.\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#show\r\n * @return {WebAccess.components.wrappers.form.BaseTableLine} Объект типа BaseTableLine.\r\n */\r\n show: function () {\r\n \r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Формирует полное имя реквизита - с номер детального раздела и номером строки черех символ $.\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#_makeFullName\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _makeFullName: function (reqName, newRowNum) {\r\n return '' + this._parentTable.detailNum + '$' + newRowNum + '$' + reqName;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Возвращает таблицу, к которой относится строка.\r\n *\r\n * @method WebAccess.components.wrappers.form.BaseTableLine#getTable\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table\r\n */\r\n getTable: function () {\r\n return this._parentTable;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.components.wrappers.form.BaseTableLine = BaseTableLine;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Строка таблицы.\r\n* \r\n* @class WebAccess.components.wrappers.form.TableRow\r\n* @extends WebAccess.components.wrappers.form.BaseTableLine\r\n* @property {string} name Имя реквизита\r\n* @property {string} selector Путь в DOM-иерархии к объекту группы, например div.content#container\r\n* @param {string} itemSelector Существующий элемент страницы\r\n*/\r\n(function (global) {\r\n\r\n /**\r\n * Имя реквизита \"Номер строки\"\r\n */\r\n var ROW_NUMBER = {\r\n VALUE: L('DETAIL_REQ_NUMBER'),\r\n DISPLAY_VALUE: 'Field_' + L('DETAIL_REQ_NUMBER')\r\n }\r\n\r\n var TableRow = global.components.wrappers.form.BaseTableLine.extend({\r\n className: \"TableRow\",\r\n\r\n _rowID: null,\r\n _isNew: false,\r\n rowNum: -1,\r\n requisites: {},\r\n\r\n // Событие когда вся строка или колонка проинициализирована, т.к. значения всех реквизитов есть.\r\n Init: null,\r\n // Массив Init для каждого реквизита в виде Deffered объектов.\r\n _reqValuesInit: null,\r\n\r\n init: function (itemSelector, rowNum, rowData, isNew, parentTable, grid) {\r\n var me = this;\r\n me._super(itemSelector, parentTable);\r\n\r\n me.Init = $.Deferred();\r\n me._reqValuesInit = [];\r\n\r\n var rowNumReq = rowData.requisitesData[ROW_NUMBER.VALUE];\r\n me.name = rowNumReq ? rowNumReq.value : rowNum;\r\n me.rowNum = rowNumReq ? +rowNumReq.value : +rowNum;\r\n\r\n me.id = me._rowID = +rowData.id;\r\n me._isNew = isNew;\r\n\r\n me.requisites = new global.components.wrappers.form.RequisiteCollection();\r\n var reqData = rowData.requisitesData;\r\n const columns = parentTable.columns; \r\n for (var reqName in reqData) {\r\n if (reqName === 'class') continue;\r\n\r\n var req = me._createRequisite(reqName, reqData[reqName], true, grid);\r\n req.fullName = me._makeFullName(reqName, me._rowID);\r\n req._isNew = isNew;\r\n\r\n if (me.isDisabled()) {\r\n req.disable();\r\n } else {\r\n // Если колонка доступна для редактирования, то сделаем текущий реквизит доступным.\r\n const currentColumn = columns[reqName];\r\n if (currentColumn && !currentColumn.isDisabled()) {\r\n req.enable();\r\n } \r\n }\r\n\r\n req.bind(req['class'].EVENT.CHANGE, function () {\r\n me.fire(me['class'].EVENT.CHANGE);\r\n });\r\n\r\n me.requisites.addElement(reqName, req);\r\n }\r\n me._jDataItems = $('div[name=\"' + me.name + '\"]');\r\n\r\n // _reqValuesInit заполняется в родительском классе requisitesMixin\r\n $.when.apply(null, me._reqValuesInit).then(function () {\r\n me.Init.resolve();\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Получает признак, что запись новая\r\n * @method WebAccess.components.wrappers.form.TableRow#isNew\r\n * @return {boolean} Признак, что запись новая\r\n * @since 5.2.0.1300\r\n */\r\n isNew: function () {\r\n return this._isNew;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить ИД строки.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableRow#getRowId\r\n * @since 5.0.0.7100\r\n * @return {integer} ИД строки детального раздела.\r\n */\r\n getRowId: function () {\r\n return this._rowID;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значения всех реквизитов для отправки на сервер.\r\n * @method WebAccess.components.wrappers.form.TableRow#_getActualValues\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _getActualValues: function () {\r\n var me = this;\r\n var tbl = me._parentTable._jObject;\r\n var row = me._jObject;\r\n var rowId = me._rowID;\r\n\r\n var res = {};\r\n var reqs = this.requisites.toArray();\r\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n var req = reqs[reqI];\r\n if (req.isChanged() || req.isNew() || (req._data.type === 'pick' && req.isRequired() && req.isRendered())) {\r\n res[me._makeFullName(req.name, rowId)] = req.getValue();\r\n }\r\n };\r\n\r\n //Дополнительные скрытые реквизиты.\r\n if (row.data('hiddenRequisites')) {\r\n // Модифицируем отправляемые данные с учетом ИД строк.\r\n var modHiddReqs = {};\r\n var hiddReqs = row.data('hiddenRequisites');\r\n for (var fullReqName in hiddReqs) {\r\n if (fullReqName.indexOf('$') !== -1) {\r\n var reqNameParts = fullReqName.split('$');\r\n if (reqNameParts.length === 3) {\r\n modHiddReqs[me._makeFullName(reqNameParts[2], rowId)] = hiddReqs[fullReqName];\r\n }\r\n }\r\n };\r\n $.extend(res, modHiddReqs);\r\n }\r\n\r\n return res;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить строку.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableRow#remove\r\n * @return {WebAccess.components.wrappers.form.TableRow} Объект типа TableRow.\r\n * @since 5.0.0.7100\r\n */\r\n remove: function () {\r\n this._parentTable.deleteRow(this._rowID, true);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сделать строку недоступной для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableRow#disable\r\n * @return {WebAccess.components.wrappers.form.TableRow} Объект типа TableRow.\r\n */\r\n disable: function () {\r\n this._super();\r\n this._jObject.find(\".Delete_16\\\\.png\").hide();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает активным, доступными для изменения все реквизиты строки.\r\n * @method WebAccess.components.wrappers.form.TableRow#enable\r\n * @return WebAccess.components.wrappers.form.TableRow\r\n * @comment Keit_B: не было ранее, пока не смотрю.\r\n */\r\n enable: function () {\r\n this._super();\r\n this._jObject.find(\".Delete_16\\\\.png\").show();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить реквизиты записи детального раздела.\r\n * \r\n * @method WebAccess.components.wrappers.form.TableRow#getRequisites\r\n * @return {WebAccess.components.wrappers.form.RequisiteCollection} Объект типа RequisiteCollection.\r\n * @since 5.0.0.7100\r\n */\r\n getRequisites: function () {\r\n return this.requisites;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показывает, заполнены ли реквизиты строки, кроме системых.\r\n * \r\n * @method WebAccess.components.wrappers.form.TableRow#hasFilledRequisites\r\n * @return {boolean} True – заполнены реквизиты строки, кроме системных, иначе – False.\r\n * @since 5.5.0.1000\r\n */\r\n hasFilledRequisites: function () {\r\n var reqs = this.requisites.toArray();\r\n return reqs.some(function (req) {\r\n var reqVal = req.getValue();\r\n return !req.isSystem() && typeof reqVal !== 'undefined' && reqVal !== '' && reqVal !== null; // 0 - это нормальное значение.\r\n });\r\n }\r\n\r\n },\r\n {\r\n EVENT: {\r\n /**\r\n * Событие срабатывает если данные в строке были изменены.\r\n *\r\n * @event WebAccess.components.wrappers.form.TableRow.EVENT.CHANGE\r\n * @param {object} context ссылка на экземпляр класса\r\n * @since 5.5.0.2201\r\n */\r\n CHANGE: 'change'\r\n //-------------------------------------------------------------------//\r\n }\r\n });\r\n\r\n global.components.wrappers.form.TableRow = TableRow;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n/**\r\n* Колонка таблицы.\r\n* \r\n* @class WebAccess.components.wrappers.form.TableColumn\r\n* @extends BaseObject\r\n* @property {string} reqName Имя реквизита.\r\n* @property {WebAccess.components.wrappers.form.Table} parentTable Таблица, которой принадлежит колонка.\r\n* @param {number} num Номер детального раздела.\r\n*/\r\n(function (global) {\r\n\r\n var TableColumn = BaseObject.extend({\r\n className: \"TableColumn\",\r\n\r\n reqName: '',\r\n _parentTable: null,\r\n _isDisabled: null,\r\n _isRendered: null,\r\n _isVisible: null,\r\n _isSystem: null,\r\n _isCanGUIRead: null,\r\n number: null,\r\n dfmName: '',\r\n\r\n init: function (reqName, parentTable, num) {\r\n var me = this;\r\n me._super();\r\n me.name = reqName;\r\n me.reqName = reqName;\r\n me._parentTable = parentTable;\r\n me.number = num;\r\n\r\n // Получить метаинформацию по колонке\r\n var currentColumnMetadata = me._parentTable.getColumnMetadata(me.reqName);\r\n\r\n me.dfmName = currentColumnMetadata.DFMName;\r\n\r\n // Установить свойства изменяемости и доступности\r\n me._isDisabled = currentColumnMetadata.IsReadOnly;\r\n me._isVisible = currentColumnMetadata.IsVisible;\r\n me._isSystem = currentColumnMetadata.IsSystem;\r\n me._isRendered = currentColumnMetadata.IsRendered;\r\n me._isCanGUIRead = currentColumnMetadata.IsCanGUIRead;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает возможность визуального чтения значения реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#getCanGUIRead\r\n * @return {boolean} True – значение реквизита отображается, иначе False.\r\n */\r\n getCanGUIRead: function() {\r\n return this._isCanGUIRead;\r\n },\r\n\r\n /**\r\n * Устанавливает возможность визуального чтения значения реквизита.\r\n * Визуально колонка не меняется, т.к. при установке значения в True необходимо\r\n * получать и устанавливать значения каждой строки таблицы.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#setCanGUIRead\r\n\t* @param {boolean} value Возможность визуального чтения значения реквизита.\r\n */\r\n setCanGUIRead: function(value) {\r\n this._isCanGUIRead = value;\r\n },\r\n\r\n /**\r\n * Признак недоступности колонки для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#isDisabled\r\n * @return {boolean} True – колонка доступна только для чтения, иначе False.\r\n */\r\n isDisabled: function () {\r\n return this._isDisabled;\r\n },\r\n\r\n /**\r\n * Признак видимости колонки.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#isVisible\r\n * @return {boolean} True – колонка отображается, иначе False.\r\n */\r\n isVisible: function () {\r\n return this._isVisible;\r\n },\r\n\r\n /**\r\n * Признак, что реквизит колонки системный.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#isSystem\r\n * @return {boolean} True – реквизит колонки системный, иначе False.\r\n */\r\n isSystem: function () {\r\n return this._isSystem;\r\n },\r\n\r\n /**\r\n * Признак наличия колонки в списке видимых.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#isRendered\r\n * @return {boolean} True – колонка вынесена на форму в редакторе форм, иначе False.\r\n */\r\n isRendered: function () {\r\n return this._isRendered;\r\n },\r\n\r\n /**\r\n * Делает колонку недоступной для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#disable\r\n * @return {WebAccess.components.wrappers.form.TableColumn} Объект типа TableColumn.\r\n */\r\n disable: function () {\r\n var me = this;\r\n var rows = me._parentTable.rows.toArray();\r\n rows.forEach(function (currentRow) {\r\n currentRow.requisites[me.reqName].disable();\r\n });\r\n me._isDisabled = true;\r\n return me;\r\n },\r\n\r\n /**\r\n * Делает колонку доступной для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#enable\r\n * @return {WebAccess.components.wrappers.form.TableColumn} Объект типа TableColumn.\r\n */\r\n enable: function () {\r\n var me = this;\r\n var rows = me._parentTable.rows.toArray();\r\n rows.forEach(function (currentRow) {\r\n currentRow.requisites[me.reqName].enable();\r\n });\r\n me._isDisabled = false;\r\n return me;\r\n },\r\n\r\n /**\r\n * Скрывает колонку.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#hide\r\n * @return {WebAccess.components.wrappers.form.TableColumn} Объект типа TableColumn.\r\n */\r\n hide: function () {\r\n if (this._isRendered) {\r\n this._parentTable._grid.hideColumn(this.reqName);\r\n this._isVisible = false;\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Отображает колонку.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#show\r\n * @return {WebAccess.components.wrappers.form.TableColumn} Объект типа TableColumn.\r\n */\r\n show: function () {\r\n var me = this;\r\n if (me._isRendered) {\r\n var index = 0;\r\n var parentGrid = me._parentTable._grid;\r\n parentGrid._columns.some(function (currentColumn) {\r\n if (currentColumn.id === me.reqName) {\r\n index = currentColumn.index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n parentGrid.showColumn(me.reqName, index);\r\n me._isVisible = true;\r\n }\r\n return me;\r\n },\r\n\r\n /**\r\n * Возвращает таблицу, к которой относится колонка.\r\n *\r\n * @method WebAccess.components.wrappers.form.TableColumn#getTable\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n getTable: function () {\r\n return this._parentTable;\r\n }\r\n });\r\n\r\n global.components.wrappers.form.TableColumn = TableColumn;\r\n})(window.WebAccess);","\"use strict\";\r\n\r\n\r\n/**\r\n * Событие срабатывает после удаления строки таблицы.\r\n * @param {integer} rowNum Номер удаленной строки.\r\n * @event WebAccess.current.form.controls.tables.TableName#deleteRow\r\n */\r\n\r\n/**\r\n * Событие срабатывает после скрытия таблицы.\r\n * @event WebAccess.current.form.controls.tables.TableName#hide\r\n */\r\n\r\n/**\r\n * Событие срабатывает после отображения таблицы.\r\n * @event WebAccess.current.form.controls.tables.TableName#show\r\n */\r\n\r\n/**\r\n * Событие срабатывает после включения таблицы.\r\n * @event WebAccess.current.form.controls.tables.TableName#enable\r\n */\r\n\r\n/**\r\n * Событие срабатывает после отключения таблицы.\r\n * @event WebAccess.current.form.controls.tables.TableName#disable\r\n */\r\n\r\n/**\r\n * Событие срабатывает после добавления или удаления строки таблицы.\r\n * @event WebAccess.current.form.controls.tables.TableName#change\r\n */\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Команды для сохранения карточки объекта.\r\n * @inner\r\n */\r\n var COMMAND = {\r\n ADD_ROW: 1,\r\n DELETE_ROW: 2\r\n };\r\n\r\n /** \r\n * Имя реквизита \"Номер строки\"\r\n * @inner\r\n */\r\n var ROW_NUMBER = {\r\n VALUE: L('DETAIL_REQ_NUMBER'),\r\n DISPLAY_VALUE: 'Field_' + L('DETAIL_REQ_NUMBER')\r\n }\r\n\r\n /**\r\n * Класс для хранения списка столбцов таблицы и \r\n * предоставления методов для работы с ними. \r\n * @class ColumnsCollection\r\n * @extends BaseTableCollection\r\n */\r\n var ColumnsCollection = WebAccess.Collection.extend({\r\n className: \"ColumnsCollection\",\r\n\r\n /**\r\n * Родительская таблица.\r\n * @property ColumnsCollection#_parentTable //\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _parentTable: null,\r\n _data: null,\r\n _isChanged: false,\r\n\r\n init: function (colsData, parentTable, grid) {\r\n var me = this;\r\n me._super();\r\n me._parentTable = parentTable;\r\n me._data = colsData;\r\n var num = 0;\r\n for (var reqName in colsData) {\r\n me.addElement(reqName, me._createTableColumn(reqName, null, num));\r\n num++;\r\n }\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Создает объект колонки.\r\n * @method ColumnsCollection#_createTableColumn\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _createTableColumn: function (reqName, isDisabled, num) {\r\n var newCol = new WebAccess.components.wrappers.form.TableColumn(reqName, this._parentTable, num);\r\n if (isDisabled) {\r\n newCol.disable();\r\n }\r\n return newCol;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает список видимых колонок таблицы.\r\n * @method ColumnsCollection#getVisibleColumns\r\n * @return {object} Массив TableColumn.\r\n\t* @since 5.5.0.1007\r\n */\r\n getVisibleColumns: function () {\r\n return this._arr.filter(function (column) {\r\n return column.isVisible;\r\n });\r\n }\r\n });\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Класс для хранения списка строк таблицы и \r\n * предоставления методов для работы с ними. \r\n * @class RowsCollection\r\n * @extends BaseTableCollection\r\n */\r\n var RowsCollection = WebAccess.Collection.extend({\r\n className: \"RowsCollection\",\r\n\r\n /**\r\n * Родительская таблица.\r\n * @method RowsCollection#_parentTable\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _parentTable: null,\r\n Init: null,\r\n //---------------------------------------------------------------------//\r\n\r\n init: function (rowsData, parentTable, grid) {\r\n var me = this;\r\n me._super();\r\n me._grid = grid;\r\n me._parentTable = parentTable;\r\n\r\n me.Init = $.Deferred();\r\n var rowsInit = [];\r\n\r\n for (var rowId in rowsData) {\r\n var currentRow = me._addRow(rowId, rowsData[rowId], false);\r\n rowsInit.push(currentRow.Init);\r\n }\r\n\r\n $.when.apply(null, rowsInit).then(function () {\r\n me.Init.resolve();\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Добавляет новую строку в коллекцию.\r\n * @method RowsCollection#_addRow\r\n * @return {object} Строка детального раздела.\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _addRow: function (rowID, rowData, isNew) {\r\n var me = this;\r\n var parentTableSelector = me._parentTable.selector;\r\n var row = new WebAccess.components.wrappers.form.TableRow(parentTableSelector + ' #' + rowID, rowID, rowData, isNew, me._parentTable, me._grid);\r\n me.addElement(rowID, row);\r\n return row;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Удаляет строку из коллекции.\r\n * @method RowsCollection#_deleteRow\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _deleteRow: function (rowID) {\r\n this.deleteElement(rowID);\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Удаляет строку детального раздела.\r\n * @method RowsCollection#deleteRow\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n deleteRow: function (rowNum) {\r\n this._parentTable.deleteRow(rowNum);\r\n return this;\r\n }\r\n //---------------------------------------------------------------------//\r\n });\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Таблица. \r\n * \r\n * @class WebAccess.components.wrappers.form.Table\r\n * @extends BaseObject\r\n * @param {string} itemSelector Cуществующий элемент страницы\r\n * @param {object} formData Данные реквизитов таблицы\r\n * @property {string} name Имя таблицы\r\n * @property {string} selector Путь к объекту группы в DOM-иерархии\r\n * @property {integer} detailNum Номер детального раздела\r\n * @property {integer} detailName Номер детального раздела в строковом представлении. Параметр устаревший, оставлен для совместимости с ранними версиями\r\n * @property {integer} rows Строка таблицы\r\n * @property {integer} columns Колонка таблицы\r\n * @property {string} parentTabName Имя закладки, на которой располагается элемент\r\n * @example \r\n * WA.CR.form.controls.tables.STcxGrid1.addRow({'ISBCoordX':{value:1, displayValue:'1'}})\r\n */\r\n var Table = BaseObject.extend({\r\n className: \"Table\",\r\n\r\n _grid: null,\r\n _uid: 0,\r\n _isDisabled: false,\r\n _currentForm: null,\r\n _columnsMetadata: {},\r\n _gridColumnsMetadata: {},\r\n\r\n detailNum: -1,\r\n detailName: \"\", //Оставлено для совместимости.\r\n rows: null,\r\n columns: null,\r\n parentTabName: null,\r\n _data: null,\r\n _hasPendingOperation: null, //для ограничения одновременно отправляемых запросов на сервер\r\n Init: null, // Событие таблица проинициализирована\r\n\r\n serviceURL: '/CardForm.asmx',\r\n\r\n _objectLink: null,\r\n _objectView: null,\r\n //---------------------------------------------------------------------//\r\n\r\n init: function (itemSelector, params) {\r\n \r\n this.Init = $.Deferred();\r\n\r\n this._currentForm = params.current.form;\r\n\r\n this.serviceURL = params.serviceURL || '/CardForm.asmx';\r\n this._objectLink = params.objectLink || $.toJSON(new WA.Link().toLinkModel());\r\n\r\n this._objectView = params.objectView;\r\n if (!this._objectView && this._objectView !== '') { //Пустая строка считается нормальным значением.\r\n this._objectView = WA.CR.getReferenceView();\r\n }\r\n\r\n this._hasPendingOperation = {\r\n 'addRow': false,\r\n 'copyRow': false,\r\n 'deleteRow': false\r\n };\r\n\r\n if (!params.formData) return;\r\n this._super(params.formData);\r\n this._data = params.formData;\r\n\r\n\r\n this._jObject = $(itemSelector);\r\n\r\n this.parentTabName = this._jObject.parents('.CardForm_Tab').data('dfmName');\r\n\r\n this.name = this._jObject.attr(\"id\");\r\n\r\n this._grid = params.grids[this.name];\r\n this._grid.setTable(this);\r\n\r\n this.selector = \"#\" + this.name;\r\n\r\n this.detailNum = +this._jObject.data('detailSectionNumber');\r\n\r\n this.detailName = '' + this.detailNum; //Оставлено для совместимости.\r\n this._isDisabled = this._data.isreadonly || this._jObject.data('readonly');\r\n this._uid = 0;\r\n\r\n // Если нет вкладок, инициализируем таблицу.ColumnsCollection\r\n this._initColumns()\r\n this._initRows();\r\n\r\n $.when(this.rows.Init).then(() => {\r\n // Событие изменения строки\r\n var tableRows = this.rows.toArray();\r\n tableRows.forEach((row) => {\r\n row.bind(row.class.EVENT.CHANGE, () => {\r\n this.fire(this.class.EVENT.CHANGE);\r\n });\r\n });\r\n\r\n this.bind(this.class.EVENT.ROW_ADDED, (newRow) => {\r\n newRow.bind(newRow.class.EVENT.CHANGE, () => {\r\n this.fire(this.class.EVENT.CHANGE);\r\n });\r\n });\r\n\r\n this.Init.resolve(); \r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _initColumns: function () {\r\n var me = this;\r\n me._columnsMetadata = me.getColumnsMetadata();\r\n me._gridColumnsMetadata = {};\r\n\r\n // Получить информацию о колонках\r\n me._columnsMetadata.forEach(function (currentColumn) {\r\n var reqName = currentColumn.Name;\r\n me._gridColumnsMetadata[reqName] = {\r\n fieldName: \"Field_\" + reqName,\r\n isVisible: currentColumn.IsVisible,\r\n isReadOnly: currentColumn.IsReadOnly,\r\n type: requisiteTypeToString(currentColumn.Type),\r\n isRequired: currentColumn.IsRequired,\r\n hasCalculation: currentColumn.HasCalculation,\r\n isSystem: currentColumn.IsSystem\r\n }\r\n });\r\n\r\n me.columns = new ColumnsCollection(me._gridColumnsMetadata, me, me._grid);\r\n },\r\n\r\n _initRows: function () {\r\n var me = this;\r\n var rows = me._grid.dataView.getItems() || [];\r\n var rowsData = me._makeRowsData(rows);\r\n me.rows = new RowsCollection(rowsData, me, me._grid);\r\n me.fire(me['class'].EVENT.DATA_RELOADED, me);\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _makeEmptyRow: function (id, opt_row) {\r\n var me = this;\r\n var row = _(me.columns).mapObject(function (val, key) { return '' });\r\n if (opt_row) $.extend(row, opt_row);\r\n row.id = id;\r\n return row;\r\n },\r\n\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Создает данные для построения реквизитов новой строки\r\n * @private\r\n */\r\n _makeRowsData: function (rows) {\r\n var me = this;\r\n var rowsMetadata = {};\r\n \r\n for (var i = 0; i < rows.length; i++) {\r\n var rowId = rows[i]['id'];\r\n me._columnsMetadata.forEach(function (columnMetadata) {\r\n var columnRequisiteName = columnMetadata.Name;\r\n\r\n var gridColumnMetadata = me._gridColumnsMetadata[columnRequisiteName];\r\n var currentColumn = me.columns[columnRequisiteName];\r\n var requisiteMetadata = {\r\n row_id: rowId,\r\n fieldName: gridColumnMetadata.fieldName,\r\n value: rows[i][columnRequisiteName],\r\n displayValue: rows[i][gridColumnMetadata.fieldName],\r\n isVisible: currentColumn.isVisible(),\r\n isReadOnly: currentColumn.isDisabled() || me.isDisabled(),\r\n type: gridColumnMetadata.type,\r\n isRequired: gridColumnMetadata.isRequired,\r\n hasCalculation: gridColumnMetadata.hasCalculation,\r\n isSystem: gridColumnMetadata.isSystem\r\n };\r\n\r\n if (!rowsMetadata[rowId]) {\r\n rowsMetadata[rowId] = {\r\n id: rowId,\r\n requisitesData: {}\r\n };\r\n }\r\n rowsMetadata[rowId]['requisitesData'][columnRequisiteName] = requisiteMetadata;\r\n });\r\n }\r\n\r\n return rowsMetadata;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сбрасывает выделение с ячейки.\r\n * @method WebAccess.components.wrappers.form.Table#resetActiveCell\r\n\t* @since 5.0.0.2706\r\n */\r\n resetActiveCell: function () {\r\n var me = this;\r\n var grid = me._grid.grid;\r\n var activeCell = grid.getActiveCell();\r\n if (activeCell) {\r\n grid.resetActiveCell();\r\n }\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак изменения реквизитов таблицы.\r\n * @since 5.0.0.7100\r\n * @method WebAccess.components.wrappers.form.Table#isChanged\r\n * @return {boolean} True – таблица была изменена, иначе False.\r\n */\r\n isChanged: function () {\r\n if (this._isChanged === true) return true;\r\n var rows = this.rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n if (rows[i].isChanged()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак недоступности реквизитов таблицы.\r\n * @method WebAccess.components.wrappers.form.Table#isDisabled\r\n * @return {boolean} True, если реквизиты таблицы не доступны для изменения, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isDisabled: function () {\r\n return this._isDisabled;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает метаданные по колонкам таблицы.\r\n * @method WebAccess.components.wrappers.form.Table#getColumnsMetadata\r\n * @return {object} Список объектов с информацией о колонках.\r\n */\r\n getColumnsMetadata: function () {\r\n return this._jObject.data('columns');\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Получает метаданные по колонке таблицы.\r\n * @method WebAccess.components.wrappers.form.Table#getColumnMetadata\r\n * @param {string} columnName Имя колонки, по которой получаются метаданные.\r\n * @return {object} Метаданные по колонке.\r\n */\r\n getColumnMetadata: function (columnName) {\r\n if (columnName) {\r\n var columnsMetadata = this.getColumnsMetadata();\r\n var columnMetadata = columnsMetadata.filter(function (item) {\r\n return item.Name === columnName;\r\n });\r\n if (columnMetadata.length > 0) return columnMetadata[0];\r\n }\r\n return;\r\n },\r\n\r\n /**\r\n * Скрыть таблицу.\r\n * @method WebAccess.components.wrappers.form.Table#hide\r\n * @fires WebAccess.components.wrappers.form.Table#hide\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n hide: function () {\r\n this._jObject.css('visibility', 'hidden');\r\n this.fire('hide');\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отобразить таблицу.\r\n * @method WebAccess.components.wrappers.form.Table#show\r\n * @fires WebAccess.components.wrappers.form.Table#show\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n show: function () {\r\n this._jObject.css('visibility', 'visible');\r\n this.fire('show');\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сделать доступными реквизиты таблицы.\r\n * @method WebAccess.components.wrappers.form.Table#enable\r\n * @fires WebAccess.components.wrappers.form.Table#enable\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n enable: function () {\r\n var me = this;\r\n var rows = me.rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n rows[i].enable();\r\n }\r\n me._isDisabled = false;\r\n me.fire('enable');\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сделать недоступными реквизиты таблицы.\r\n * @method WebAccess.components.wrappers.form.Table#disable\r\n * @fires WebAccess.components.wrappers.form.Table#disable\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n disable: function () {\r\n var me = this;\r\n var rows = me.rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n rows[i].disable();\r\n }\r\n me._isDisabled = true;\r\n me.fire('disable');\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить столбцы таблицы. \r\n * Столбцы в данном случае – объекты типа TableColumn.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#getColumns\r\n * @see Column\r\n * @see ColumnsCollection\r\n * @return {ColumnsCollection} Объект типа ColumnsCollection.\r\n */\r\n getColumns: function () {\r\n return this.columns;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /** \r\n * Обновить идентификатор строки\r\n * @private \r\n */\r\n _updateRowID: function (oldId, newId) {\r\n var me = this;\r\n var dataView = me._grid.dataView;\r\n var row = dataView.getItemById(oldId);\r\n if (!row) return this;\r\n\r\n row.id = newId;\r\n this.rows.deleteElement(oldId)\r\n dataView.deleteItem(oldId)\r\n dataView.addItem(row);\r\n var rowsData = me._makeRowsData([row]);\r\n this.rows._addRow(newId, rowsData[newId], false);\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить строки таблицы. \r\n * Строки в данном случае – объекты типа TableRow.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#getRows\r\n * @see Row\r\n * @see RowsCollection\r\n * @return {Object} Объект содержащий строки таблицы. Ключом является номер строки. Также в объекте есть метод count, возвращающий количество строк.\r\n * @deprecated since 5.0.0.7100\r\n */\r\n getRows: function () {\r\n var me = this;\r\n var resultRowsByName = {};\r\n var rows = me.rows.toArray();\r\n for (var rowI = 0; rowI < rows.length; rowI++) {\r\n resultRowsByName[rows[rowI].name] = rows[rowI];\r\n }\r\n resultRowsByName['count'] = function () {\r\n return me.rows.count();\r\n };\r\n return resultRowsByName;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _getGeneratedRow: function (isBuilderEventsSupported, opt_requisiteValues, opt_sync) {\r\n var me = this;\r\n me._uid -= 1;\r\n\r\n var newRowNumber = me._getNextRowNumber();\r\n\r\n var result = $.Deferred();\r\n\r\n if (isBuilderEventsSupported) {\r\n me._hasPendingOperation['addRow'] = true;\r\n\r\n me._sendRequest('CreateTableRow', {\r\n Obj: me._objectLink,\r\n Requisites: opt_requisiteValues || {},\r\n View: me._objectView,\r\n DetailNum: me.detailNum,\r\n Number: newRowNumber\r\n }, opt_sync).done(function (data) {\r\n if (data !== \"\") {\r\n data = $.parseJSON(data);\r\n \r\n result.resolve(data);\r\n }\r\n }).fail(function (errorMessage, response) {\r\n // В ответе с ошибкой могут прийти изменения других реквизитов и их надо будет обработать.\r\n if (response && response.Result) {\r\n var data = $.parseJSON(response.Result);\r\n result.reject(data);\r\n }\r\n }).always(function () {\r\n me._hasPendingOperation['addRow'] = false;\r\n });\r\n } else {\r\n // Здесь нам нужны все реквизиты, иначе потом в случае ошибки \r\n // мы не сможем полноценно обновить эту строку в методе updateRowID\r\n var row = me.columns.toArray()\r\n .filter(function (col) { return !col.isSystem(); }) //пропускаем системные реквизиты, т.к. их нельзя устанавливать.\r\n .reduce(function (prev, curr) { prev[curr.name] = null; return prev; }, {}); // преобразуем массив колонок в объект типа {colName1: null, ...}\r\n\r\n row.id = me._uid;\r\n row[ROW_NUMBER.VALUE] = row[ROW_NUMBER.DISPLAY_VALUE] = newRowNumber;\r\n\r\n // Устанавливаем значение реквизитов.\r\n if (!!opt_requisiteValues) {\r\n for (var reqName in opt_requisiteValues) {\r\n var reqValue = opt_requisiteValues[reqName];\r\n if (!_.isUndefined(row[reqName])) {\r\n row[reqName] = reqValue.value;\r\n row['Field_' + reqName] = reqValue.displayValue;\r\n }\r\n }\r\n }\r\n\r\n me._currentForm._commandList.push({\r\n CmdCode: COMMAND.ADD_ROW,\r\n Section: me.detailNum,\r\n ID: me._uid\r\n });\r\n\r\n result.resolve({ RowData: row });\r\n }\r\n return result;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Генерирует следующий номер строки.\r\n * @private\r\n */\r\n _getNextRowNumber: function () {\r\n var me = this;\r\n var lastRowNum = 0;\r\n\r\n var dataView = me._grid.dataView;\r\n var exisitingRows = dataView.getItems() || [];\r\n\r\n if (exisitingRows.length) {\r\n var lastRowNum = _(exisitingRows).chain().map(function (r) {\r\n return +r[ROW_NUMBER.VALUE]\r\n }).max().value();\r\n }\r\n\r\n return +lastRowNum + 1;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Добавить строку детального раздела.\r\n *\r\n * @function WebAccess.components.wrappers.form.Table#addRow\r\n * @param {object} opt_requisiteValues Значение реквизитов в формате: \r\n * {'имя реквизита': {value: 'значение', displayValue: 'отображаемое значение', 'needTriggerResult': 'true|false нужно ли вызывать событие на установку значения (по умолчанию true)'},...}\r\n * @param {function} opt_callback Функция для добавления строки. Предназначена для совместимости. Рекомендуется использовать событие типа addRow\r\n * @param {boolean} opt_sync Признак синхронного создания строки. Предназначен для свместимости. Рекомендуется использовать асинхронное создание строки\r\n * @fires WebAccess.components.wrappers.form.Table#addRow\r\n * @fires WebAccess.components.wrappers.form.Table#change\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n */\r\n addRow: function (opt_requisiteValues, opt_callback, opt_sync) {\r\n var me = this;\r\n\r\n if (me._hasPendingOperation['addRow']) return me;\r\n\r\n me._getGeneratedRow(me._grid.settings.isBuilderEventsSupported, opt_requisiteValues, opt_sync).done(function (data) {\r\n var row = data.RowData;\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me._appendNewRowToDataView(row, changes, changedMultiSelects, function (tableRow) {\r\n // Отбираем колонки, у которых CanGUIRead = false\r\n var currentTableColumns = me.columns.toArray();\r\n currentTableColumns.forEach(function (column) {\r\n var reqName = column.reqName;\r\n var currentRequisite = tableRow.requisites[reqName];\r\n if (!column.getCanGUIRead()) {\r\n currentRequisite.setValue('*', '*', false);\r\n currentRequisite.setUntouched();\r\n }\r\n if (!!opt_requisiteValues && opt_requisiteValues[reqName] && opt_requisiteValues[reqName].needTriggerResult) {\r\n currentRequisite.touch();\r\n }\r\n });\r\n\r\n // Установить состояния реквизитов\r\n tableRow._disableReadOnlyFields();\r\n\r\n if ($.isFunction(opt_callback)) opt_callback(tableRow);\r\n });\r\n }).fail(function (data) {\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me.fire('applychanges', null, changes, me, changedMultiSelects);\r\n });\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Копирует строку детального раздела на сервере.\r\n *\r\n * @function WebAccess.components.wrappers.form.Table#copyRowOnServer\r\n * @param {integer} sourceRowId ИД копируемой строки\r\n * @param {object} opt_requisiteValues Значение реквизитов в формате: \r\n * {'имя реквизита': {value: 'значение', displayValue: 'отображаемое значение', 'needTriggerResult': 'true|false - признак необходимости вызывать событие для установки значения (по умолчанию true)'},...}\r\n * @param {function} opt_callback Функция для добавления строки. Предназначена для обратной совместимости с предыдущими версиями. Рекомендуется использовать событие типа addRow\r\n * @param {boolean} opt_sync Признак синхронного создания строки. Предназначен для обратной совместимости с предыдущими версиями. Рекомендуется использовать асинхронное создание строки\r\n * @fires WebAccess.components.wrappers.form.Table#addRow\r\n * @fires WebAccess.components.wrappers.form.Table#change\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.2.0.1300\r\n */\r\n copyRowOnServer: function (sourceRowId, opt_requisiteValues, opt_callback, opt_sync) {\r\n var me = this;\r\n\r\n if (me._hasPendingOperation['copyRow']) return me;\r\n\r\n var result = $.Deferred();\r\n var newRowNumber = me._getNextRowNumber();\r\n\r\n me._hasPendingOperation['copyRow'] = true;\r\n\r\n me._sendRequest('CopyTableRow', {\r\n Obj: me._objectLink,\r\n View: me._objectView,\r\n DetailNum: me.detailNum,\r\n SourceRowID: sourceRowId,\r\n Number: newRowNumber,\r\n Requisites: opt_requisiteValues || {}\r\n }, opt_sync).done(function (data) {\r\n data = $.parseJSON(data);\r\n result.resolve(data);\r\n }).fail(function (errorMessage, response) {\r\n // В ответе с ошибкой могут прийти изменения других реквизитов и их надо будет обработать.\r\n if (response && response.Result) {\r\n var data = $.parseJSON(response.Result);\r\n result.reject(data);\r\n }\r\n }).always(function () {\r\n me._hasPendingOperation['copyRow'] = false;\r\n });\r\n\r\n // Строка скопирована, добавляем в DataSource.\r\n result.done(function (data) {\r\n var row = data.RowData;\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me._appendNewRowToDataView(row, changes, changedMultiSelects, opt_callback);\r\n }).fail(function (data) {\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me.fire('applychanges', null, changes, me, changedMultiSelects);\r\n });\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _appendNewRowToDataView: function (row, changes, changedMultiSelects, opt_callback) {\r\n var me = this;\r\n me.fire(me.class.EVENT.BEFORE_ROW_ADDED, me);\r\n\r\n var dataView = me._grid.dataView;\r\n dataView.addItem(row);\r\n dataView.refresh(); \r\n row = me._makeEmptyRow(row.id, row);\r\n\r\n var rowsData = me._makeRowsData([row]);\r\n me.rows._addRow(row.id, rowsData[row.id], true);\r\n\r\n if ($.isFunction(opt_callback)) opt_callback(me.rows[row.id]);\r\n\r\n me._isChanged = true; \r\n me.fire('change', me.rows[row.id], me);\r\n me.fire('applychanges', me.rows[row.id], changes, me, changedMultiSelects);\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _tryToDeleteRow: function (rowID, isBuilderEventsSupported, opt_sync) {\r\n var me = this;\r\n var result = $.Deferred();\r\n\r\n if (isBuilderEventsSupported) {\r\n me._hasPendingOperation['deleteRow'] = true;\r\n\r\n me._sendRequest('DeleteTableRow', {\r\n Obj: me._objectLink,\r\n View: me._objectView,\r\n DetailNum: me.detailNum,\r\n RowID: rowID\r\n }, opt_sync).done(function (data) {\r\n if (data) data = $.parseJSON(data);\r\n result.resolve(rowID, data);\r\n }).fail(function (errorMessage, response) {\r\n // В ответе с ошибкой могут прийти изменения других реквизитов и их надо будет обработать.\r\n if (response && response.Result) {\r\n var data = $.parseJSON(response.Result);\r\n result.reject(rowID, data);\r\n }\r\n }).always(function () {\r\n me._hasPendingOperation['deleteRow'] = false;\r\n });\r\n } else {\r\n var commands = me._currentForm._commandList;\r\n var existingCommand = _(commands).findWhere({ 'ID': rowID, 'CmdCode': COMMAND.ADD_ROW, Section: +me.detailNum });\r\n\r\n if (existingCommand) {\r\n //Если удаляем только что добавленую строку, то удаляем и команду на добавление\r\n me._currentForm._commandList = _(commands).filter(function (cmd) {\r\n return ((cmd.ID !== rowID) || (cmd.Section !== +me.detailNum))\r\n });\r\n } else {\r\n //Если удаляем существующую строку, то добавим команду на её удаление\r\n me._currentForm._commandList.push({\r\n CmdCode: COMMAND.DELETE_ROW,\r\n Section: me.detailNum,\r\n ID: rowID\r\n });\r\n }\r\n result.resolve(rowID, {});\r\n }\r\n\r\n return result;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Удалить строку детального раздела.\r\n *\r\n * @function WebAccess.components.wrappers.form.Table#deleteRow\r\n * @param {integer} rowNum Номер строки\r\n * @fires WebAccess.components.wrappers.form.Table#deleteRow\r\n * @fires WebAccess.components.wrappers.form.Table#change\r\n * @fires WebAccess.components.wrappers.form.Table#applychanges\r\n * @return {TableWebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.0.0.7100\r\n */\r\n deleteRow: function (rowId, opt_sync) {\r\n var me = this;\r\n\r\n if (me._hasPendingOperation['deleteRow']) {\r\n return me;\r\n }\r\n\r\n if (!isNaN(rowId)) {\r\n\r\n var dataView = me._grid.dataView;\r\n var row = dataView.getItemById(rowId);\r\n me._tryToDeleteRow(+rowId, me._grid.settings.isBuilderEventsSupported, opt_sync).done(function (id, data) {\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n\r\n dataView.deleteItem(rowId);\r\n me.rows._deleteRow(rowId);\r\n me._isChanged = true;\r\n me.fire('deleteRow', rowId, row);\r\n me.fire('change', row, me);\r\n me.fire('applychanges', row, changes, me, changedMultiSelects);\r\n }).fail(function (id, data) {\r\n var changes = data.Changes;\r\n var changedMultiSelects = data.ChangedMultiSelectRequisitesValues;\r\n me.fire('applychanges', row, changes, me, changedMultiSelects);\r\n });\r\n\r\n } else {\r\n WA.raise('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED');\r\n }\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Вернуть реквизит таблицы по ИД элемента управления.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#getRequisiteByControlId\r\n * @param {string} controlId ИД HTML-элемента.\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Объект реквизита.\r\n */\r\n getRequisiteByControlId: function (controlId) {\r\n log.warning('REQUISITE', 'This method was changed in last version and may work improperly.');\r\n var rowsArr = this.rows.toArray();\r\n for (var rowI = 0; rowI < rowsArr.length; rowI++) {\r\n var row = rowsArr[rowI];\r\n var reqs = row.requisites.toArray();\r\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n var req = reqs[reqI];\r\n for (var j = 0; j < req.controlsIds.length; j++) {\r\n if (controlId === req.controlsIds[j]) {\r\n return req;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Возвращает строку таблицы по ИД.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#getRowById\r\n * @return {TableRow} Объект строки.\r\n * @since 5.2.0.1300\r\n */\r\n getRowById: function (rowId) {\r\n return this.rows[rowId];\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Обновляет данные таблицы.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#reloadData\r\n * @return {Deferred} Специальный deferred-объект\r\n * @since 5.2.0.1303\r\n */\r\n reloadData: function () {\r\n var me = this;\r\n log.warn('TABLE', 'Table reloaded. If you have any binded event handlers for rows or columns you must rebind them manualy');\r\n return this._grid.reloadData().done(function () {\r\n me._initRows();\r\n\r\n // Восстанавливаем логику ведущих ведомых после обновления страницы\r\n WA.CR.bindLeaderDrivenLogicToTable(me);\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отправляет запрос на веб-сервис.\r\n * @private\r\n */\r\n _sendRequest: function (action, params, opt_sync) {\r\n var method = WA.SRV.call;\r\n if (opt_sync === true) {\r\n method = WA.SRV.callSync;\r\n }\r\n return method(this.serviceURL + '/' + action, params);\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Привязывает вызов справочника в модальном окне к клику на иконке в поле ввода.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#bindReferenceGridDialog\r\n * @param {String | Array} requisites Имя или имена реквизитов для привязки логики вызова справочника в модальном окне\r\n * @return {TableWebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.4.0.1012\r\n */\r\n bindReferenceGridDialog: function (requisites) {\r\n var me = this;\r\n\r\n var colNames = typeof (requisites) === 'string' ? [requisites] : requisites;\r\n\r\n // На существующие строки.\r\n var rows = me.rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n bindOnRowRequisites(rows[i]);\r\n }\r\n // На новые строки\r\n me.bind(me['class'].EVENT.ROW_ADDED, function (newRow) {\r\n bindOnRowRequisites(newRow);\r\n });\r\n\r\n function bindOnRowRequisites(row) {\r\n for (var j = 0; j < colNames.length; j++) {\r\n var req = row.requisites[colNames[j]]\r\n if (req) {\r\n req.bindReferenceGridDialog();\r\n }\r\n }\r\n }\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Устанавливает признак isChanged в состояние false.\r\n *\r\n * @method WebAccess.components.wrappers.form.Table#setUntouched\r\n * @return {TableWebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.7.0\r\n */\r\n setUntouched() {\r\n this._isChanged = false;\r\n return this;\r\n },\r\n\r\n }, {\r\n EVENT: {\r\n /**\r\n * Событие срабатывает до добавления строки таблицы.\r\n *\r\n * @event WebAccess.components.wrappers.form.Table.EVENT.BEFORE_ROW_ADDED \r\n * @param {object} context ссылка на экземпляр класса \r\n * @since 5.7.0\r\n */\r\n BEFORE_ROW_ADDED: 'beforeAddRow',\r\n\r\n /**\r\n * Событие срабатывает после добавления строки таблицы.\r\n *\r\n * @event WebAccess.components.wrappers.form.Table.EVENT.ROW_ADDED\r\n * @param {TableRow} newRow Новая строка.\r\n * @param {object} context ссылка на экземпляр класса\r\n * @example\r\n * var table = WebAccess.current.form.controls.tables['STcxGrid1'];\r\n * table.bind(table['class'].EVENT.ROW_ADDED , function(newRow, table) {\r\n * console.log(newRow);\r\n * newRow.requisites['СодержаниеТ2'].setValue('тест', 'тест');\r\n * });\r\n * @since 5.2.0.2014\r\n */\r\n ROW_ADDED: 'addRow',\r\n //-------------------------------------------------------------------//\r\n\r\n /**\r\n * Событие срабатывает если данные в таблице были обновлены.\r\n *\r\n * @event WebAccess.components.wrappers.form.Table.EVENT.DATA_RELOADED\r\n * @param {object} context ссылка на экземпляр класса\r\n * @since 5.2.0.2014\r\n */\r\n DATA_RELOADED: 'dataReloaded',\r\n //-------------------------------------------------------------------//\r\n \r\n /**\r\n * Событие срабатывает, если данные в таблице были изменены.\r\n *\r\n * @event WebAccess.components.wrappers.form.Table.EVENT.CHANGE\r\n * @param {object} context Ссылка на экземпляр класса\r\n * @since 5.5.0.2201\r\n */\r\n CHANGE: 'change'\r\n //-------------------------------------------------------------------//\r\n }\r\n });\r\n\r\n global.Table = Table;\r\n})(window.WebAccess.components.wrappers.form);\r\n","\"use strict\";\r\n\r\n/**\r\n* Предоставляет инструменты для работы с элементами формы.\r\n*\r\n* @class WebAccess.components.wrappers.form.Form\r\n* @extends BaseObject\r\n* @mixes WebAccess.mixins.requisitesMixin\r\n* @param {object} data - данные формы\r\n* @param {string} serviceUrl - адрес сервиса сохранения данных\r\n* @since 5.2.0.1600\r\n*/\r\n\r\n/**\r\n * Выполняется до начала сохранения формы.\r\n *\r\n * @event WebAccess.components.wrappers.form.Form#BeforeSave\r\n * @param {function} process Основной поток действий по выполнению сохранения формы.\r\n * При необходимости вызов функции позволяет продолжить процесс сохранения в любой момент времени\r\n * @param {object} data Данные для сохранения формы\r\n * @param {function} callback Функция, выполняющаяся после сохранения формы. Можно вызвать в любой момент сохранения\r\n * @example\r\n *\r\n * WA.CR.form.bind(\"BeforeSave\", function(process,data,callback) {\r\n * console.log(process,data,callback);\r\n * var dialog = new WA.CMP.dialogs.BaseDialog();\r\n * dialog.setHtml('Карточка не будет сохранена, но страница перезагрузится');\r\n * dialog.ok = function() {\r\n * process();\r\n * }\r\n * dialog.show();\r\n * return false;\r\n * });\r\n */\r\n\r\n/**\r\n * Выполняется в момент сохранения формы.\r\n *\r\n * @event WebAccess.components.wrappers.form.Form#Save\r\n * @param {function} process Основной поток действий по выполнению сохранения формы.\r\n * При необходимости вызов функции позволяет продолжить процесс сохранения в любой момент времени\r\n * @param {object} data Данные для сохранения формы\r\n * @param {function} callback Функция, выполняющаяся после сохранения формы. Можно вызвать в любой момент сохранения\r\n */\r\n\r\n/**\r\n * Выполняется после завершения сохранения формы.\r\n *\r\n * @event WebAccess.components.wrappers.form.Form#AfterSave\r\n * @param {function} process Основной поток действий по выполнению сохранения формы.\r\n * При необходимости вызов функции позволяет продолжить процесс сохранения в любой момент времени\r\n * @param {object} data Данные для сохранения формы\r\n * @param {function} callback Функция, выполняющаяся после сохранения формы. Можно вызвать в любой момент сохранения\r\n */\r\n\r\n(function (global) {\r\n\r\n var CHANGE_TYPE = {\r\n REQUISITE_CHANGE: 0,\r\n DETAIL_ROW_INSERT: 1,\r\n DETAIL_ROW_DELETE: 2,\r\n PICK_VALUES_CHANGE: 3,\r\n FORM_CONTROL_CHANGE: 4,\r\n FORM_REQUISITE_CONTROL_CHANGE: 5,\r\n ACTION_CHANGE: 6,\r\n REQUISITE_GUI_CHANGE: 7\r\n };\r\n\r\n var CONTROL_TYPE = {\r\n TABLE: 6,\r\n REQUISITE: 9,\r\n INPLACE_HINT: 17,\r\n TAB: 23,\r\n HYPERLINK: 26,\r\n MULTISELECT: 28,\r\n WEB_BROWSER: 24,\r\n DETAIL_SECTION_REQUISITE: 100\r\n };\r\n\r\n var Form = BaseObject.extend([global.mixins.requisitesMixin], {\r\n serviceUrl: null,\r\n _current: null,\r\n _calcServiceCall: {}, //таймауты вызова сервиса на изменение реквизита (для оптимизации количества запросов).\r\n\r\n init: function (data, serviceUrl, opt_current) {\r\n var me = this;\r\n log.info('FORM', 'Init current form')\r\n\r\n me.Init = $.Deferred();\r\n me._reqValuesInit = [];\r\n\r\n me._current = opt_current;\r\n me._calcServiceCall = {};\r\n\r\n this.serviceUrl = serviceUrl;\r\n me.requisites = new global.components.wrappers.form.RequisiteCollection();\r\n if (!data) {\r\n // Если данных нет, то сразу говорим что форма проинициализирована. Нужно для дальнейшего resolv'a WA.FormInit.\r\n me.Init.resolve();\r\n return;\r\n }\r\n me._super(data);\r\n\r\n me._data = data;\r\n\r\n me._commandList = [];\r\n this._isDisabled = me._data.isreadonly;\r\n me._fillRequisites();\r\n\r\n if (!me._data.isInitialized) {\r\n me._initRequisiteValues(me._data.req);\r\n } else {\r\n me._bindMirrors(me._data.req);\r\n }\r\n me._bindCalculation();\r\n\r\n var requisites = me.requisites.toArray();\r\n requisites.forEach(function (req) {\r\n req.bind(req['class'].EVENT.CHANGE, function (el, ev, reqData) {\r\n me.fire(me['class'].EVENT.CHANGE, el, ev, reqData);\r\n });\r\n });\r\n\r\n me._current.states.tables.done(function () {\r\n var form = (!!me._current) ? me._current.form : global.current.form;\r\n var tables = form.controls.tables;\r\n\r\n _(tables).forEach(function (table) {\r\n table.bind(table['class'].EVENT.CHANGE, function () {\r\n me.fire(me['class'].EVENT.CHANGE);\r\n });\r\n });\r\n });\r\n\r\n // _reqValuesInit заполняется в родительском классе requisitesMixin\r\n $.when.apply(null, me._reqValuesInit).then(function () {\r\n me.Init.resolve();\r\n log.info('FORM', 'Current form requsites values inited')\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n className: \"Form\",\r\n\r\n /**\r\n * Реквизиты текущей формы.\r\n * Содержит объекты WebAccess.components.wrappers.form.requisites для управления реквизитами.\r\n *\r\n * @namespace WebAccess.current.form.requisites\r\n * @see WebAccess.components.wrappers.form.requisites\r\n * @since 5.0.0.7100\r\n */\r\n requisites: {},\r\n\r\n /**\r\n * Команды при сохранении.\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _commandList: [],\r\n\r\n /**\r\n * Исходные данные текущей формы\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _data: null,\r\n\r\n /**\r\n * Признак активности формы.\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _isDisabled: false,\r\n\r\n // Событие когда вся форма проинициализирована, т.к. значения всех реквизитов есть.\r\n Init: null,\r\n // Массив Init для каждого реквизита в виде Deffered объектов.\r\n _reqValuesInit: null,\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Создание объектов реквизитов.\r\n * @method WebAccess.components.wrappers.form.Form#_fillRequisites\r\n * @since 5.0.0.7100\r\n * @private\r\n */\r\n _fillRequisites: function () {\r\n for (var reqName in this._data.req) {\r\n this.requisites.addElement(reqName, this._createRequisite(reqName, this._data.req[reqName]));\r\n };\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получчение значения реквизита для сериализации.\r\n * @param {Object} requisite Реквизит, значение которого требуется получить.\r\n * @param {Object} options Настройки сериализации.\r\n * @returns {Object} Значение реквизита для сериализации.\r\n * @since 5.2.0.2006\r\n * @private\r\n */\r\n _getRequisiteValueDependsOnOptions: function (requisite, options) {\r\n var result;\r\n\r\n if (requisite.getType() == 1 && (options.dateFormat || options.dateTimeFormat)) {\r\n if (requisite.isShowTime()) {\r\n result = formatDateTime(requisite.getDate(), options.dateTimeFormat);\r\n } else {\r\n result = formatDate(requisite.getDate(), options.dateFormat);\r\n }\r\n } else {\r\n result = requisite.getValue();\r\n }\r\n\r\n if (!options.onlyValue) {\r\n result = [result, requisite.getDisplayValue()];\r\n }\r\n\r\n return result;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сериализация формы.\r\n *\r\n * @method WebAccess.components.wrappers.form.Form#serialize\r\n * @ignore\r\n * @param {Object} opt_options Настройки сериализации.\r\n * @return {Object} Литеральный объект.\r\n * @since 5.0.0.7300\r\n *\r\n * @example\r\n * var formBackup = WA.CR.form.serialize();\r\n * WA.cache.setObject('formBackup', formBackup);\r\n *\r\n * ...\r\n *\r\n * WA.CR.form.deserialize(WA.cache.getObject('formBackup'));\r\n */\r\n serialize: function (opt_options) {\r\n var options = opt_options || {\r\n onlyValue: false, // Возвращать только значения, т.е. без отображаемого значения.\r\n useRowNumber: false, //Возвращать номер строк вместо ИД.\r\n withoutTables: false, //Не возвращать массив tables.\r\n dateFormat: '', // Формат дат.\r\n dateTimeFormat: '', // Формат даты со временем.\r\n transformMultiReqsToDetailRows: false // Преобразование реквизитов множественного выбора в детальный раздел\r\n };\r\n\r\n var reqs = this.requisites.toArray();\r\n var result = {};\r\n result.details = {};\r\n result.requisites = {};\r\n for (var i = 0; i < reqs.length; i++) {\r\n result.requisites[reqs[i].name] = this._getRequisiteValueDependsOnOptions(reqs[i], options);\r\n\r\n if (options.transformMultiReqsToDetailRows) {\r\n var reqControl = reqs[i].controls[0];\r\n if (typeof reqControl !== 'undefined') {\r\n var refSelectInstance = reqControl.data('ReferenceSelectInstance');\r\n if ((typeof reqControl.data('ReferenceSelectInstance') !== 'undefined') && reqControl.data('ReferenceSelectInstance').multiselect) {\r\n //реквизит множественного выбора\r\n var currentValue = result.requisites[reqs[i].name];\r\n if ($.isArray(currentValue)) {\r\n currentValue = currentValue[0];\r\n }\r\n\r\n if (!!currentValue) {\r\n var detailNum = refSelectInstance.detailIndex;\r\n var currentValueArray = currentValue.split(';');\r\n result.details[detailNum] = {};\r\n for (var j = 0; j < currentValueArray.length; j++) {\r\n var reqInfo = currentValueArray[j].split(':');\r\n var multiReqNames = refSelectInstance.referenceCodesAndReqNamesInDetailSection;\r\n\r\n result.details[detailNum][j] = {};\r\n var reqName = multiReqNames[reqInfo[0]].name;\r\n if (reqName) {\r\n result.details[detailNum][j][reqName] = reqInfo[1];\r\n }\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.tables = {};\r\n var tables = this.controls.tables;\r\n for (var table in tables) {\r\n var detailNum = tables[table].detailNum;\r\n result.tables[table] = {};\r\n result.details[detailNum] = {};\r\n var rows = tables[table].rows.toArray()\r\n for (var i = 0; i < rows.length; i++) {\r\n var row = rows[i];\r\n var rowIdentifier = row.id;\r\n if (options.useRowNumber) {\r\n rowIdentifier = row.name; //Номер строки.\r\n }\r\n result.tables[table][rowIdentifier] = {};\r\n result.details[detailNum][rowIdentifier] = {};\r\n var reqs = row.requisites.toArray();\r\n for (var k = 0; k < reqs.length; k++) {\r\n var req = reqs[k];\r\n var value = this._getRequisiteValueDependsOnOptions(req, options);\r\n result.tables[table][rowIdentifier][req.name] = value;\r\n result.details[detailNum][rowIdentifier][req.name] = value;\r\n }\r\n }\r\n }\r\n\r\n if (options.withoutTables) {\r\n delete result['tables'];\r\n }\r\n\r\n return result;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить строковое представление объекта.\r\n *\r\n * @method WebAccess.components.wrappers.form.Form#asString\r\n * @return {String} Строковое представление объекта.\r\n */\r\n asString: function () {\r\n return $.toJSON(this.serialize());\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Десериализация формы.\r\n *\r\n * @method WebAccess.components.wrappers.form.Form#deserialize\r\n * @ignore\r\n * @param {Object} data Сериализованная ранее форма\r\n * @return {WebAccess.current.form} Преобразованная форма.\r\n * @since 5.0.0.7300\r\n *\r\n * @example\r\n * var formBackup = WA.CR.form.serialize();\r\n * WA.cache.setObject('formBackup', formBackup);\r\n *\r\n * ...\r\n *\r\n * WA.CR.form.deserialize(WA.cache.getObject('formBackup'));\r\n */\r\n deserialize: function (data) {\r\n var reqs = data.requisites;\r\n for (var n in reqs) {\r\n this.requisites[n].setValue(reqs[n][0]).setDisplayValue(reqs[n][1]);\r\n }\r\n\r\n var tables = data.tables;\r\n for (var table in tables) {\r\n for (var rowId in tables[table].rows) {\r\n for (var req in tables.rows[rowId]) {\r\n var row = tables[table].rows[rowId];\r\n this.controls.tables[table].rows[rowId].requisites[req].setValue(row[req][0]).setDisplayValue(row[req][1]);\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Восстановить значения реквизитов на форме.\r\n *\r\n * @method undoRequisiteChanges\r\n * @since 5.7.0\r\n */\r\n undoRequisiteChanges() {\r\n // Восстановить значения реквизитов\r\n const requisites = window.formData.req;\r\n for (const requisiteName of Object.keys(requisites)) {\r\n const requisite = this.requisites[ requisiteName ];\r\n if (requisite.isChanged()) {\r\n const value = requisites[ requisiteName ].value;\r\n const displayValue = requisites[ requisiteName ].displayValue;\r\n requisite.setValue(value, displayValue, false);\r\n requisite.setUntouched();\r\n }\r\n }\r\n\r\n // Восстановить значения табличных разделов\r\n const tables = this.controls.tables;\r\n for (const tableName of Object.keys(tables)) {\r\n const table = tables[ tableName ];\r\n table.reloadData();\r\n }\r\n },\r\n\r\n /**\r\n * При наличии вычислении на реквизитах обрабатывать их.\r\n *\r\n * @method WebAccess.components.wrappers.form.Form#_bindCalcutaion\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.Form\r\n */\r\n _bindCalculation() {\r\n if (!this._current) return;\r\n\r\n const rebindRow = (row) => {\r\n let rowRequisites = row.requisites.toArray();\r\n rowRequisites.forEach((rowRequisite) => {\r\n this._bindRequisiteCalculation(rowRequisite);\r\n });\r\n };\r\n\r\n const rebindTable = (table) => {\r\n let rows = table.rows.toArray();\r\n rows.forEach((row) => {\r\n rebindRow(row);\r\n });\r\n };\r\n\r\n let requisites = this.requisites.toArray();\r\n requisites.forEach((cardRequisite) => {\r\n this._bindRequisiteCalculation(cardRequisite);\r\n });\r\n\r\n this._current.states.tables.done(() => {\r\n let tables = this.controls.tables;\r\n for (let tableName in tables) {\r\n let table = tables[tableName];\r\n\r\n table.bind(table.class.EVENT.DATA_RELOADED, (table) => {\r\n rebindTable(table);\r\n }).bind(table.class.EVENT.ROW_ADDED, (row) => {\r\n rebindRow(row);\r\n }).bind('applychanges', (row, changes, table, changedMultiSelects) => {\r\n if (row) {\r\n row._locked = true;\r\n }\r\n this.applyServerSideChanges(changes, changedMultiSelects);\r\n });\r\n rebindTable(table);\r\n }\r\n });\r\n\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Если реквизит имеет вычисления, то реализовать их выполенение\r\n *\r\n * @method WebAccess.components.wrappers.form.Form#_bindRequisiteCalculation\r\n * @private\r\n * @return {boolean} True – форма на странице существует, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n _bindRequisiteCalculation(req) {\r\n const parentCurrent = this._current;\r\n\r\n if (req.hasCalculation) {\r\n req.bind('change', (r, ev, data) => {\r\n if (req.isCalculationDisabled()) {\r\n return this;\r\n }\r\n req._showSpinner();\r\n\r\n //data может быть массивом, когда заполняется реквизит множественного выбора (#108963).\r\n if (data instanceof Array) {\r\n data = {\r\n value: data\r\n .map(val => val.value)\r\n .join(';'),\r\n };\r\n }\r\n\r\n clearTimeout(this._calcServiceCall[req.fullName]);\r\n // Событие change может сработать несколько раз в разнымх местах (в разных компонентах) для одно и того же реквизита. Из-за этого отправятся 2 одинаковых запроса, а нам этого не надо.\r\n // Например, так бывает autoNumeric тригерит change и slickGrid тригерит change через commitCurrentEdit->fire(requisiteChange). По-другому сделать не получилось.\r\n this._calcServiceCall[req.fullName] = setTimeout(() => {\r\n WA.SRV.request(`${this.serviceUrl}/SetRequisiteValue`, {\r\n Obj: parentCurrent._getObjectLink(),\r\n RequisiteName: req.fullName,\r\n RequisiteValue: req.getValue(),\r\n View: parentCurrent.getReferenceView ? parentCurrent.getReferenceView() : '',\r\n }, {\r\n hideError: true,\r\n }).done((response) => {\r\n const resp = JSON.parse(response);\r\n this.applyServerSideChanges(\r\n resp.Changes,\r\n resp.ChangedMultiSelectRequisitesValues,\r\n );\r\n }).fail((message, response) => {\r\n const inlineHintParams = {\r\n priority: INLINE_HINT_PRIORITY.PRIMARY,\r\n type: Number(response.Severity),\r\n }; \r\n parentCurrent.inlineHint.show(message, inlineHintParams);\r\n\r\n // В ответе с ошибкой могут прийти изменения других реквизитов и их надо будет обработать.\r\n if (response && response.Result) {\r\n const result = JSON.parse(response.Result);\r\n this.applyServerSideChanges(\r\n result.Changes,\r\n result.ChangedMultiSelectRequisitesValues,\r\n );\r\n }\r\n }).always(function () {\r\n req._hideSpinner();\r\n });\r\n }, 100);\r\n\r\n });\r\n }\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Обработка изменений пришедших от сервера\r\n * @param {array} changes набор изменений\r\n * @method WebAccess.components.wrappers.form.Form#applyServerSideChanges\r\n * @since 5.2.0.2014\r\n * @return {WebAccess.components.wrappers.form.Form}\r\n * @example\r\n * WA.SRV.call(me.serviceURL + '/ExecuteAction', {\r\n * ActionName: name,\r\n * ...\r\n * }, null, null, true).done(function (response) {\r\n * var responseAsObject = JSON.parse(response);\r\n *\r\n * // Обрабатываем результат выполнения действия.\r\n * var dialogResult = responseAsObject.Result;\r\n *\r\n * // Обрабатываем изменения реквизитов действием.\r\n * var changes = responseAsObject.Changes;\r\n * console.log(changes);\r\n * WA.CR.form.applyServerSideChanges(changes);\r\n *\r\n *}).fail(function (err) {\r\n * // Показываем ошибку.\r\n *});\r\n */\r\n applyServerSideChanges: function (changes, changedMultiSelects) {\r\n var me = this;\r\n if (changes && changes.length) {\r\n me._applyRequisiteChanges(changes);\r\n me._applyPickValuesChange(changes);\r\n me._applySectionsChange(changes);\r\n me._applyFormControlChanges(changes);\r\n me._applyActionChanges(changes);\r\n me._applyRequisiteGuiChange(changes);\r\n }\r\n if (changedMultiSelects && Object.keys(changedMultiSelects).length) {\r\n me._applyMultiSelectRequisiteChanges(changedMultiSelects);\r\n }\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Применить изменения визуальной части реквизитов.\r\n * @private\r\n * @param {array} changes Набор изменений.\r\n * @since 5.5.0.2701\r\n */\r\n _applyRequisiteGuiChange: function (changes) {\r\n var me = this;\r\n var current = me._current;\r\n\r\n // Получить изменения визуальной части реквизитов.\r\n var guiChanges = [];\r\n var details = {};\r\n\r\n _(changes).each(function (change) {\r\n if (change.Type === CHANGE_TYPE.REQUISITE_GUI_CHANGE) {\r\n guiChanges.push(change);\r\n if (change.Section) {\r\n details[change.Section] = true;\r\n }\r\n }\r\n });\r\n\r\n // Перед тем, как переходить к обработке визуальных изменений,\r\n // нужно сбросить фокус с активной ячейки грида, иначе невозможно установить\r\n // значение в данную ячейку и возникают ошибки\r\n Object.keys(details).forEach(function (sectionNumber) {\r\n var detail = current.details[sectionNumber];\r\n var tables = detail.getTables().toArray();\r\n tables.forEach(function (table) {\r\n table.resetActiveCell();\r\n });\r\n });\r\n\r\n if (me.isChanged() && guiChanges.length) {\r\n me.save(function () {\r\n me._applyGuiChangesCallback(guiChanges);\r\n }, false);\r\n } else {\r\n me._applyGuiChangesCallback(guiChanges);\r\n }\r\n },\r\n\r\n /**\r\n * Callback-функция для применения визуальных изменений.\r\n * @private\r\n * @param {array} guiChanges Набор изменений.\r\n * @since 5.5.0.2705\r\n */\r\n _applyGuiChangesCallback: function (guiChanges) {\r\n var me = this;\r\n var current = me._current;\r\n\r\n _(guiChanges).each(function (change) {\r\n var requisite;\r\n var isRequisiteEnabled = change.CanGUIRead && change.CanGUIWrite;\r\n\r\n if (change.Section) {\r\n var detail = current.details[change.Section];\r\n if (detail) {\r\n if (change.RowID) {\r\n var currentRecord;\r\n var table = detail.getTable();\r\n if (table) {\r\n currentRecord = table.getRowById(change.RowID);\r\n if (currentRecord) {\r\n requisite = currentRecord.requisites[change.Name];\r\n }\r\n }\r\n }\r\n\r\n // Установить CanGUIRead для колонки детального раздела\r\n var tables = detail.getTables().toArray();\r\n tables.forEach(function (table) {\r\n var column = table.columns[change.Name];\r\n if (column) {\r\n column.setCanGUIRead(change.CanGUIRead);\r\n if (isRequisiteEnabled) {\r\n column.enable();\r\n } else {\r\n column.disable();\r\n }\r\n }\r\n });\r\n\r\n }\r\n } else {\r\n requisite = me.requisites[change.Name];\r\n if (isRequisiteEnabled) {\r\n requisite.enable();\r\n } else {\r\n requisite.disable();\r\n }\r\n }\r\n\r\n if (requisite) {\r\n // Установка значения реквизита производится только в случае изменения CanGUIRead\r\n // Как следствие, либо в реквизите, либо в изменении значение должно отображаться\r\n // как скрытое - в виде *\r\n if (change.Value === '*' || requisite.getValue() === '*') {\r\n requisite.setValue(change.Value, change.DisplayValue, false);\r\n requisite.commit();\r\n }\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Обновляем состояния доступности и видимости кнопок на панели инструментов.\r\n * @private\r\n * @param {array} changes Набор изменений.\r\n * @since 5.5.0.2200\r\n */\r\n _applyActionChanges: function (changes) {\r\n var toolBar = this._current.toolBar;\r\n\r\n if (toolBar) {\r\n var actionChanges = _(changes).filter(function (change) {\r\n return change.Type === CHANGE_TYPE.ACTION_CHANGE;\r\n });\r\n\r\n _(actionChanges).each(function (change) {\r\n // Получить список связанных с действием кнопок\r\n var buttons = toolBar.buttons.getButtonsByActionName(change.Name);\r\n\r\n buttons.forEach(function (button) {\r\n // Установить свойство доступности\r\n if (change.IsEnabled) {\r\n button.enable();\r\n } else {\r\n button.disable();\r\n }\r\n\r\n // Установить свойство видимости\r\n if (change.IsVisible) {\r\n button.show();\r\n } else {\r\n button.hide();\r\n }\r\n\r\n // Установить свойство отмеченности\r\n if (change.IsChecked) {\r\n button.select();\r\n } else {\r\n button.unSelect();\r\n }\r\n\r\n // Установить текст всплывающей подсказки\r\n button.setHints(change.Hint, change.DisabledHint);\r\n });\r\n });\r\n }\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Обновляем состояния доступности и видимости контролов на форме.\r\n * @private\r\n * @param {array} changes набор изменений\r\n * @since 5.5.0.1302\r\n */\r\n _applyFormControlChanges: function (changes) {\r\n var current = this._current;\r\n var controlChanges = _(changes).filter(function (change) {\r\n return change.Type === CHANGE_TYPE.FORM_CONTROL_CHANGE || change.Type === CHANGE_TYPE.FORM_REQUISITE_CONTROL_CHANGE;\r\n });\r\n var tabs = current.sideBar.tabs.toArray();\r\n\r\n _(controlChanges).each(function (change) {\r\n var currentControl;\r\n var isControlEnabled = change.IsEnabled;\r\n var color = change.TextColor;\r\n var backgroundColor = change.BackgroundColor;\r\n if (change.Type === CHANGE_TYPE.FORM_REQUISITE_CONTROL_CHANGE) {\r\n isControlEnabled &= !change.IsReadOnly;\r\n\r\n currentControl = current.form.requisites[change.RequisiteName];\r\n if (currentControl) {\r\n // Получаем элемент для раскраски по имени контрола, т.к. реквизит может быть привязан к нескольким контролам и изменяем цвет\r\n const jRequisiteConrol = $(`div[name= ${change.Name}]`);\r\n let jColoredArea;\r\n if (currentControl.getType() === REQUISITE_TYPE.REFERENCE || currentControl.getType() === REQUISITE_TYPE.DOCUMENT) {\r\n jColoredArea = jRequisiteConrol.find('.fakeInput');\r\n jRequisiteConrol.find('.rs_SelItems input, span').css('color', color);\r\n } else {\r\n jColoredArea = jRequisiteConrol.find('input.input[type=text], textarea.input');\r\n jColoredArea.css('color', color);\r\n }\r\n jColoredArea.css('background-color', backgroundColor); \r\n } else {\r\n _(current.form.controls.tables).some(function (table) {\r\n var columns = table.columns.toArray();\r\n columns.some(function (column) {\r\n if (column.dfmName === change.Name) {\r\n currentControl = column;\r\n }\r\n return currentControl;\r\n });\r\n return currentControl;\r\n });\r\n }\r\n } else {\r\n switch (change.ControlType) {\r\n case CONTROL_TYPE.TABLE:\r\n currentControl = current.form.controls.tables[change.Name];\r\n break;\r\n case CONTROL_TYPE.TAB:\r\n var filteredTabs = tabs.filter(function (el) {\r\n return el.dfmName === change.Name;\r\n });\r\n if (filteredTabs.length > 0) {\r\n currentControl = filteredTabs[0];\r\n // Закладки боковой панели всегда доступны для перехода. Учитываются только свойства видимости.\r\n // Сделано по аналогии с десктоп-клиентом, где блокируется не сама вкладка, а ее содержимое.\r\n isControlEnabled = true;\r\n }\r\n break;\r\n case CONTROL_TYPE.HYPERLINK:\r\n // Если для метки не указан bind on click, то не делать enable, т.к. он снимает класс disabled.\r\n currentControl = current.form.controls.links[change.Name];\r\n if (change.IsEnabled && currentControl._jObject.hasClass('disabled'))\r\n change.IsEnabled = false;\r\n break;\r\n case CONTROL_TYPE.MULTISELECT:\r\n // Получить имя реквизита\r\n var reqName = $('div[name=' + change.Name + ']').not('.CardForm_Label').data('requisitename');\r\n if (reqName) {\r\n currentControl = current.form.requisites[reqName];\r\n }\r\n const jRequisiteConrol = $(`div[name= ${change.Name}]`); \r\n jRequisiteConrol.find('.fakeInput').css('background-color', backgroundColor);\r\n jRequisiteConrol.find('.rs_SelItems input, span').css('color', color);\r\n break;\r\n case CONTROL_TYPE.WEB_BROWSER:\r\n // Если тип контрола - web-браузер, то управляем только видимостью и адресом. \r\n var currentControl = $('iframe[name=' + change.Name + ']');\r\n if (currentControl) {\r\n var url = change.URL;\r\n currentControl.attr(\"src\", url)\r\n if (change.IsVisible) {\r\n currentControl.show();\r\n } else {\r\n currentControl.hide();\r\n }\r\n }\r\n return;\r\n\r\n case CONTROL_TYPE.INPLACE_HINT:\r\n // Получить встроенную подсказку \r\n let hint = new WA.CMP.NTF.InlineHint();\r\n\r\n if (change.IsVisible) {\r\n switch (change.Kind) {\r\n case MESSAGE_TYPE.ERROR:\r\n hint.showError(change.Text, null, INLINE_HINT_PRIORITY.SECONDARY);\r\n break;\r\n case MESSAGE_TYPE.WARNING:\r\n hint.showWarning(change.Text, null, INLINE_HINT_PRIORITY.SECONDARY);\r\n break;\r\n default:\r\n hint.showInfo(change.Text, null, INLINE_HINT_PRIORITY.SECONDARY);\r\n break;\r\n }\r\n }\r\n else {\r\n hint.hide(INLINE_HINT_PRIORITY.SECONDARY);\r\n }\r\n return;\r\n default:\r\n // Если тип контрола - группа, то управляем только видимостью.\r\n // Доступность и изменяемость группы перенесена на дочерние элементы.\r\n currentControl = $('div[name=' + change.Name + ']');\r\n if (change.IsVisible) {\r\n currentControl.css('visibility', 'visible');\r\n } else {\r\n currentControl.css('visibility', 'hidden');\r\n }\r\n return;\r\n }\r\n }\r\n\r\n if (currentControl) {\r\n if (isControlEnabled) {\r\n currentControl.enable();\r\n } else {\r\n currentControl.disable();\r\n }\r\n\r\n if (change.IsVisible) {\r\n currentControl.show();\r\n } else {\r\n currentControl.hide();\r\n }\r\n\r\n }\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Обновляем детальные разделы при добавлении/удалении значений\r\n * @private\r\n * @since 5.2.0.2014\r\n */\r\n _applyRequisiteChanges(changes) {\r\n let parentCurrent = this._current;\r\n\r\n changes.forEach((currentChange) => {\r\n if (currentChange.Type === CHANGE_TYPE.REQUISITE_CHANGE) {\r\n if (currentChange.Section) {\r\n let currentDetail = parentCurrent.details[currentChange.Section];\r\n\r\n if (currentDetail) {\r\n let currentDetailTables = currentDetail.getTables().toArray();\r\n currentDetailTables.forEach((table) => {\r\n let row = table.rows[currentChange.RowID];\r\n\r\n if (row) {\r\n let rowRequisite = row.requisites[currentChange.Name];\r\n\r\n if (rowRequisite) {\r\n rowRequisite.setValue(currentChange.Value, currentChange.DisplayValue, false);\r\n rowRequisite.commit();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n let cardRequisite = this.requisites[currentChange.Name];\r\n if (cardRequisite) {\r\n cardRequisite.setValue(currentChange.Value, currentChange.DisplayValue, false);\r\n cardRequisite.commit();\r\n }\r\n }\r\n }\r\n });\r\n return this;\r\n },\r\n\r\n /**\r\n * Обновить formData на основе значений реквизитов формы.\r\n *\r\n * @method _updateFormData\r\n * @private\r\n * @since 5.7.0\r\n */\r\n _updateFormData() {\r\n if (window.formData) {\r\n const requisites = window.formData.req;\r\n for (const formDataRequisiteName of Object.keys(requisites)) {\r\n const formRequisite = this.requisites[ formDataRequisiteName ];\r\n const newDisplayValue = formRequisite.getDisplayValue();\r\n const newValue = formRequisite.getValue();\r\n\r\n const formDataRequisite = requisites[ formDataRequisiteName ];\r\n formDataRequisite.displayValue = newDisplayValue;\r\n formDataRequisite.value = newValue;\r\n }\r\n } \r\n },\r\n\r\n /**\r\n * Указать, что реквизиты не изменены.\r\n *\r\n * @method _unTouchRequisites\r\n * @private\r\n * @since 5.7.0\r\n */\r\n _unTouchRequisites() {\r\n // Главный раздел\r\n for (const requisite of this.requisites.toArray()) {\r\n requisite.setUntouched();\r\n }\r\n\r\n // Детальные разделы\r\n for (const tableName of Object.keys(this.controls.tables)) {\r\n const table = this.controls.tables[ tableName ];\r\n\r\n if (table.isChanged()) {\r\n table.setUntouched();\r\n for (const row of table.rows.toArray()) {\r\n if (row.isChanged()) {\r\n for (const requisite of row.requisites.toArray()) {\r\n if (requisite.isChanged()) {\r\n requisite.setUntouched();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Обновляем значения множественный выборов.\r\n * @private\r\n * @since 5.5.0.1000\r\n */\r\n _applyMultiSelectRequisiteChanges: function (changedMultiSelects) {\r\n var me = this;\r\n\r\n if (!changedMultiSelects) return;\r\n\r\n for (reqName in changedMultiSelects) {\r\n if (me.requisites.isExist(reqName) && me.requisites[reqName].isMultiselect) {\r\n var req = me.requisites[reqName];\r\n var displayValues = changedMultiSelects[reqName].First;\r\n var ids = changedMultiSelects[reqName].Second\r\n\r\n if (req.isMultiselect()) {\r\n // Множественный выбор из одного или нескольких справочников.\r\n\r\n displayValues = changedMultiSelects[reqName].First.split(';');\r\n ids = changedMultiSelects[reqName].Second.split(';');\r\n\r\n var values = [];\r\n ids.forEach(function (id, i) {\r\n var idParts = id.split(':');\r\n\r\n var refcode;\r\n if (idParts.length >= 2) {\r\n refcode = idParts[0];\r\n id = idParts[1];\r\n } else {\r\n var refcodes = req.getReferences();\r\n // Получаем первый ключ в объекте.\r\n for (refcode in refcodes) break;\r\n }\r\n\r\n values.push({\r\n groupcode: refcode,\r\n id: id,\r\n name: displayValues[i]\r\n });\r\n\r\n });\r\n\r\n req.setValues(values, false);\r\n } else {\r\n // Единичный выбор из нескольких справочников.\r\n req.setValue(ids, displayValues, false);\r\n }\r\n req.commit();\r\n\r\n }\r\n }\r\n\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Динамическое перестроение значений pick-реквизита\r\n * @private\r\n * @since 5.2.0.2014\r\n */\r\n _applyPickValuesChange: function (changes) {\r\n var me = this;\r\n var parentCurrent = me._current;\r\n\r\n\r\n _(changes).chain().filter(function (req) {\r\n return req.Type === CHANGE_TYPE.PICK_VALUES_CHANGE;\r\n }).each(function (req) {\r\n\r\n if (req.Section) {\r\n //Детальные разделы пропускаем, т.к. некорректно работают из-за режима редактирования и нередактирования.\r\n return;\r\n\r\n _.each(parentCurrent.details[req.Section].getTables().toArray(), function (table) {\r\n\r\n _.each(table.rows.toArray(), function (row) {\r\n\r\n if (row && row.requisites[req.Name]) {\r\n var needReset = true;\r\n var oldVal = row.requisites[req.Name].getValue();\r\n\r\n row.requisites[req.Name].clearValues();\r\n if (!row.requisites[req.Name].isRequired()) {\r\n row.requisites[req.Name].addValue('', '');\r\n };\r\n\r\n _.each(req.Items, function (item) {\r\n if (oldVal == item.ID) needReset = false;\r\n row.requisites[req.Name].addValue(item.ID, item.DisplayText);\r\n });\r\n\r\n if (needReset) {\r\n row.requisites[req.Name].setValue('', '', false);\r\n }\r\n }\r\n });\r\n });\r\n } else {\r\n //Реквизиты карточки\r\n var oldVal = me.requisites[req.Name].getValue();\r\n var needReset = true;\r\n\r\n me.requisites[req.Name].clearValues();\r\n\r\n if (!me.requisites[req.Name].isRequired()) {\r\n me.requisites[req.Name].addValue('', '');\r\n };\r\n\r\n _.each(req.Items, function (item) {\r\n if (oldVal == item.ID) needReset = false;\r\n me.requisites[req.Name].addValue(item.ID, item.DisplayText);\r\n });\r\n\r\n if (needReset) {\r\n me.requisites[req.Name].setValue('', '', false);\r\n }\r\n }\r\n });\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Обновляем детальные разделы при добавлении/удалении значений\r\n * @private\r\n * @since 5.2.0.2014\r\n */\r\n _applySectionsChange(changes) {\r\n\r\n // Указатель на текущую форму.\r\n let current = this._current;\r\n let sectionRowMap = {};\r\n\r\n // Выборка измененных детальных разделов, в которые были добавлены строки.\r\n changes.forEach((change) => {\r\n if (change.Type === CHANGE_TYPE.DETAIL_ROW_INSERT || change.Type === CHANGE_TYPE.DETAIL_ROW_DELETE) { \r\n let mapRowIdTmp = sectionRowMap[change.Section] || [];\r\n mapRowIdTmp.push(change.RowID); \r\n sectionRowMap[change.Section] = mapRowIdTmp;\r\n }\r\n });\r\n\r\n let sections = Object.keys(sectionRowMap); \r\n if (!sections.length) return this;\r\n\r\n this.save(() => {\r\n // Проходим по всему ассоциативному массиву sectionRowMap\r\n sections.forEach((detailSectionNumber) => {\r\n // Проверяем наличие детального раздела.\r\n let detail = current.details[detailSectionNumber];\r\n if (!detail) return this;\r\n\r\n // Проходим по всем таблицам детального раздела.\r\n let detailsTablesArray = detail.getTables().toArray();\r\n\r\n detailsTablesArray.forEach((table) => {\r\n // Вызываем перезагрузку таблицы\r\n table.reloadData().done(() => {\r\n // Получаем идентификатор строки по текущему детальному разделу.\r\n let mapRowIdTmp = sectionRowMap[detailSectionNumber]; \r\n mapRowIdTmp && mapRowIdTmp.forEach((rowId) => {\r\n let tableRows = table.rows.toArray(); \r\n // Находим добавленную строку\r\n let addedRow = tableRows.find(item => item.id === rowId);\r\n if (addedRow) { \r\n table.fire(table['class'].EVENT.ROW_ADDED, table.rows[addedRow.id], table);\r\n table.fire(table['class'].EVENT.CHANGE);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }, false, undefined, {\r\n disableHidePreviousInlineHint: true\r\n });\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Проверить наличие формы на странице.\r\n *\r\n * @method WebAccess.current.form.isExist\r\n * @return {boolean} True – форма на странице существует, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isExist: function () {\r\n return !!this._data;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак недоступности реквизитов формы.\r\n *\r\n * @method WebAccess.current.form.isDisabled\r\n * @return {boolean} True – форма открывается только для чтения, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isDisabled: function () {\r\n return this._isDisabled;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сделать все реквизиты недоступными и скрыть ссылку «Добавить строку».\r\n *\r\n * @method WebAccess.current.form.disable\r\n * @return {WebAccess.current.form} Текущая форма.\r\n * @since 5.0.0.7100\r\n */\r\n disable: function () {\r\n var me = this;\r\n $.when(WA.FormControlsInit, WA.FormInit, WA.DetailsInit).then(function () {\r\n me._disable();\r\n if (me.controls)\r\n for (var tableName in me.controls.tables) {\r\n me.controls.tables[tableName].disable();\r\n };\r\n me._isDisabled = true;\r\n });\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сделать все реквизиты доступными и отобразить ссылку «Добавить строку».\r\n *\r\n * @method WebAccess.current.form.enable\r\n * @return {WebAccess.current.form} Текущая форма.\r\n * @since 5.0.0.7100\r\n */\r\n enable: function () {\r\n var me = this;\r\n me._enable();\r\n for (var tableName in me.controls.tables) {\r\n me.controls.tables[tableName].enable();\r\n };\r\n me._isDisabled = false;\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак изменения реквизитов.\r\n *\r\n * @method WebAccess.current.form.isChanged\r\n * @return {boolean} True – реквизиты были изменены, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isChanged: function () {\r\n var me = this;\r\n var reqs = me.requisites.toArray();\r\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n if (reqs[reqI].isChanged()) {\r\n return true;\r\n }\r\n }\r\n // Получаем данные из детальных разделов.\r\n var tables = me.controls.tables;\r\n for (var tableName in tables) {\r\n const table = tables[tableName];\r\n // Проверям саму таблицу, т.к. она могла измениться удалаением строки\r\n if (table.isChanged()) {\r\n return true;\r\n } \r\n }\r\n return false;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Используется при сохранении формы - обводка реквизитов незаполненных\r\n * обязательных реквизитов красным.\r\n * поля для которых доступ только на чтение.\r\n *\r\n * @method WebAccess.current.form._highlightRequisites\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.current.form}\r\n */\r\n _highlightRequisites: function (reqsStr, details) {\r\n\r\n var prevColor;\r\n var me = this;\r\n\r\n if (!reqsStr) return;\r\n\r\n // Получаем список реквизитов\r\n var reqs = reqsStr.split(\", \");\r\n // Пробегаемся по списку чтобы выделить реквизиты\r\n for (var i = 0; i < reqs.length; i++) {\r\n var requisite;\r\n if (reqs[i].indexOf('$') !== -1) {\r\n var reqNameParts = reqs[i].split('$');\r\n var detailNum = +reqNameParts[0];\r\n var rowId = +reqNameParts[1];\r\n var reqName = reqNameParts[2];\r\n\r\n var tables = details[detailNum].getTables().toArray();\r\n for (var t = 0; t < tables.length; t++) {\r\n var table = tables[t];\r\n var row = table.rows[rowId];\r\n if (!row) continue;\r\n\r\n requisite = row.requisites[reqName];\r\n if (!requisite) continue;\r\n\r\n requisite.highlight();\r\n }\r\n } else {\r\n requisite = me.requisites[reqs[i]];\r\n if (!requisite) continue;\r\n\r\n requisite.highlight();\r\n }\r\n }\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Снятие красной обводки со всех реквизитов.\r\n *\r\n * @method WebAccess.current.form._unHighlightRequisites\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.current.form}\r\n */\r\n _unHighlightRequisites: function () {\r\n $('.Card_Element').find('.Req_Error').removeClass('Req_Error');\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сохранить карточку объекта.\r\n *\r\n * @method WebAccess.current.form.save\r\n * @param {function} callback Функция, вызвается после сохранения.\r\n * @param {Boolean} needSaveObject Признак - нужно ли сохранять изменения в базу.\r\n * @param {Integer} folderIdToPaste Папка для вставки ссылки на сохраняем объект.\r\n * @param {Object} [options] Дополнительные настройки сохранения.\r\n * @param {String} options.needShowError Нужно ли показывать ошибку.\r\n * @param {String} options.disableHidePreviousInlineHint Нужно ли скрывать предыдущую ошибку при удачно сохранении.\r\n * @return {WebAccess.current.form} Текущая форма карточки объекта с сохраненными изменениями.\r\n * @since 5.0.0.7100\r\n */\r\n save: function (callback, needSaveObject, folderIdToPaste, options) {\r\n return this.saveAndAttach(callback, needSaveObject, new WA.Link(folderIdToPaste, OBJECT_TYPE.FOLDER), options);\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Сохранить и вложить карточку объекта в папку, задачу, задание или уведомление.\r\n * @method WebAccess.current.form.saveAndAttach\r\n * @param {function} callback Функция, вызвается после сохранения.\r\n * @param {Boolean} needSaveObject Признак - нужно ли сохранять изменения в базу.\r\n * @param {Object} receiverObjectLink Объект для вставки ссылки на сохраняем объект.\r\n * @param {Object} [options] Дополнительные настройки сохранения.\r\n * @param {String} options.needShowError Нужно ли показывать ошибку.\r\n * @param {String} options.disableHidePreviousInlineHint Нужно ли скрывать предыдущую ошибку при удачно сохранении.\r\n * @return {WebAccess.current.form} Объект типа form.\r\n * @since 5.0.0.7100\r\n */\r\n saveAndAttach: function (callback, needSaveObject, receiverObjectLink, options) {\r\n return this._saveExtended(callback, needSaveObject, receiverObjectLink, $.extend({\r\n needShowError: true\r\n }, options));\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Расширенное сохранение карточки текущего объекта (больше параметров функции).\r\n *\r\n * @method WebAccess.current.form._saveExtended\r\n * @since 5.1.0.1305\r\n * @private\r\n * @return {WebAccess.current.form}\r\n */\r\n _saveExtended: function (callback, needSaveObject, receiverObjectLink, options) {\r\n var me = this;\r\n me.fire('prepareSave');\r\n\r\n options = options || {};\r\n // Показываем ошибку по умолчанию?\r\n options.needShowError = (options.needShowError !== false);\r\n options.disableHidePreviousInlineHint = (options.disableHidePreviousInlineHint === true);\r\n\r\n me._unHighlightRequisites();\r\n\r\n if (me.isDisabled()) {\r\n if (callback) callback(false);\r\n return me;\r\n };\r\n\r\n needSaveObject = !!needSaveObject;\r\n\r\n var form = (!!me._current) ? me._current.form : global.current.form;\r\n var data = {\r\n Obj: $.toJSON(me._data.obj),\r\n View: WA.CR.getReferenceView(),\r\n Req: me._getRequisitesToSend(form),\r\n Cmd: $.toJSON(me._commandList),\r\n NeedSaveObject: needSaveObject,\r\n ReceiverObjectLink: receiverObjectLink\r\n };\r\n me.fireAll(\"Save\", me._saveData, data, callback, options);\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n _getRequisitesToSend: function (form) {\r\n var res = {};\r\n\r\n // Получаем данные из карточки.\r\n var reqs = form.requisites.toArray();\r\n for (var reqI = 0; reqI < reqs.length; reqI++) {\r\n var req = reqs[reqI];\r\n if (!req.isCommited() && (req.isChanged() || req.isNew() || (req._data.type === 'pick' && req.isRequired() && req.isRendered()))) {\r\n res[req.name] = req.getValue();\r\n };\r\n };\r\n\r\n // Получаем данные из детальных разделов.\r\n if (form.controls) {\r\n var tables = form.controls.tables;\r\n for (var tableName in tables) {\r\n var rows = tables[tableName].rows.toArray();\r\n for (var i = 0; i < rows.length; i++) {\r\n $.extend(res, rows[i]._getActualValues())\r\n };\r\n };\r\n };\r\n return $.toJSON(res)\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отправка сохраняемых данных и применение изменений на клиенте.\r\n *\r\n * @method WebAccess.current.form._save\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.current.form}\r\n */\r\n _saveData(data, callback, options) { \r\n let params = {\r\n Obj: data.Obj,\r\n View: data.View,\r\n Req: data.Req,\r\n Cmd: data.Cmd,\r\n NeedSaveObject: data.NeedSaveObject,\r\n ReceiverObjectLink: (!!data.ReceiverObjectLink && data.ReceiverObjectLink.id ? data.ReceiverObjectLink.toLinkModel() : null), \r\n }\r\n if (!this._current._jDialog) {\r\n params.Mode = (new WA.URL()).getParam('mode').toUpperCase()\r\n }\r\n\r\n WA.SRV.call(this.serviceUrl + '/SaveAndAttach', params, null, null, true).done((result, response) => { \r\n if (WA.CMP.NTF.InlineHint && !options.disableHidePreviousInlineHint) {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n }\r\n this._updateModel(result, this._current.details, data.NeedSaveObject); \r\n if (data.NeedSaveObject) {\r\n UnbindBeforeUnload();\r\n BindBeforeUnload(); \r\n this._unTouchRequisites();\r\n } \r\n if (typeof callback === 'function' || callback instanceof Function) {\r\n callback(true, response.Warning);\r\n }\r\n HideTopSpinner(); \r\n }).fail((message, response) => { \r\n this._updateModel(response.Result, global.current.details, data.NeedSaveObject);\r\n let inlineHint = WA.CR.inlineHint;\r\n this._handleFailSave(response, options.needShowError, callback, global.current.details, inlineHint);\r\n });\r\n },\r\n\r\n /**\r\n * Обрабатывает неуспешый запрос к веб-методу сохранения карточки. \r\n * @method WebAccess.current.form._handleFailSave\r\n * @param {Object} response Ответ веб-метода.\r\n * @param {bool} needShowError Признак отображения ошибки: True - если ошибку необходимо отобразить, иначе False.\r\n * @param {function} callback Функция, которая должна быть вызвана после сохранения.\r\n * @param {Object} details Детальные разделы.\r\n * @param {Object} inlineHint Встроенная подсказка. \r\n * @private\r\n * @since 5.5.0 \r\n */\r\n _handleFailSave(response, needShowError, callback, details, inlineHint) { \r\n const severity = (response.Severity !== \"-1\" ? Number(response.Severity) : undefined); \r\n // Проверяем есть ли в ошибке {}\r\n if (needShowError) {\r\n let message;\r\n const isJSON = new RegExp(/^\\{.+\\}$/);\r\n if (isJSON.test(response.Error)) {\r\n const err = JSON.parse(response.Error);\r\n // Получаем сообщение без указания реквизитов\r\n message = format(L(\"ERROR_MSG\"), err.message);\r\n this._highlightRequisites(err.reqs, details);\r\n } else { \r\n message = format(L(\"ERROR_MSG\"), response.Error); \r\n }\r\n const inlineHintParams = {\r\n priority: INLINE_HINT_PRIORITY.PRIMARY,\r\n type: severity,\r\n }; \r\n inlineHint.show(format(L(\"ERROR_MSG\"), message), inlineHintParams);\r\n };\r\n if (typeof callback === 'function' || callback instanceof Function) {\r\n callback(false, response.Warning);\r\n }\r\n HideTopSpinner();\r\n },\r\n \r\n /**\r\n * Устанавливает ИД новым строкам после сохранения.\r\n * @method WebAccess.current.form._fillRowsID\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.current.form}\r\n */\r\n _fillRowsID(appendedRecords, details) {\r\n // Заполняем ИД для новых строк. \r\n if (appendedRecords) {\r\n\r\n let model = JSON.parse(appendedRecords);\r\n const rowNumber2IDs = model.RowNumber2ID || [];\r\n for (const rowNumber of rowNumber2IDs) {\r\n const tbl = $(`table[data-section=${rowNumber.Section}'][id]`);\r\n $(`#row${rowNumber.Number}`, tbl).data('id', rowNumber.ID);\r\n }\r\n\r\n const newRowIDs = model.ApendedRecords || [];\r\n for (const newRow of newRowIDs) { \r\n const section = newRow[0];\r\n const tempID = newRow[1];\r\n const realID = newRow[2];\r\n const tables = details[section].getTables().toArray();\r\n\r\n const table = tables.find((table) => {\r\n return !!table.rows[tempID];\r\n });\r\n table._updateRowID(tempID, realID);\r\n\r\n // Обнуляем признак isNew\r\n table.rows[realID]._isNew = false;\r\n const reqs = table.rows[realID].requisites.toArray();\r\n reqs.forEach((r) => { \r\n r._isNew = false; \r\n });\r\n\r\n this._commandList = this._commandList.filter((cmd) => {\r\n return cmd.ID != tempID && cmd.Section != section\r\n });\r\n } \r\n }; \r\n return this;\r\n }, \r\n\r\n /**\r\n * Обновляет модель карточки.\r\n *\r\n * @method WebAccess.current.form._updateModel\r\n * @param {string} result Строка, содержащая модели карточки в формате JSON.\r\n * @param {Object} details Детальные разделы.\r\n * @param {bool} needApplyChanges Признак необходимости применения изменений: True - если изменения необходимо применить, иначе False.\r\n * @private\r\n * @since 5.7.0\r\n */\r\n _updateModel(result, details, needApplyChanges) {\r\n if (result) {\r\n const model = JSON.parse(result);\r\n if (!this._current._jDialog) {\r\n if (needApplyChanges) { \r\n // Применяем серверные изменения.\r\n this.applyServerSideChanges(\r\n model.Changes,\r\n model.ChangedMultiSelectRequisitesValues,\r\n );\r\n \r\n // Обновление formData на основе изменений реквизитов\r\n this._updateFormData(); \r\n }\r\n \r\n // Обновляем тулбар. \r\n this._current.initToolbar('ToolbarContainer', model.ToolBarModel); \r\n \r\n // Обновляем заголовок страницы.\r\n const headerDomElement = $('#ctl00_CardHeader_PageHeader').find('.react-container')[0];\r\n if (headerDomElement) {\r\n WA.CR.initCardHeader(headerDomElement, model.CardHeader);\r\n } \r\n }\r\n \r\n // Заполняем ИД строк в детальных разделах.\r\n this._fillRowsID(model.AdditionalCardFormResult, details);\r\n } \r\n }\r\n //---------------------------------------------------------------------//\r\n }, {\r\n EVENT: {\r\n /**\r\n * Событие срабатывает, если данные на форме были изменены.\r\n *\r\n * @event WebAccess.components.wrappers.form.Form.EVENT.CHANGE\r\n * @param {object} context Ссылка на экземпляр класса\r\n * @since 5.5.0.2201\r\n */\r\n CHANGE: 'change'\r\n //-------------------------------------------------------------------//\r\n }\r\n });\r\n\r\n global.components.wrappers.form.Form = Form;\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n/**\r\n* Элемент списка объектов.\r\n*\r\n* @class WebAccess.components.wrappers.objectList.ListItem\r\n* @since 5.0.0.4102\r\n* @extends BasePageElement\r\n* @property {string} id ИД объекта\r\n* @property {string} name Имя объекта\r\n* @property {string} kind Тип объекта. Например, задача, задание, документ\r\n* @param {string} itemSelector Существующий элемент списка\r\n* @param {boolean} isTableItem Признак того, что текущий элемент является строкой таблицы\r\n*/\r\n(function (global) {\r\n\r\n var ListItem = WebAccess.components.wrappers.BasePageElement.extend([global.mixins.linkMixin], {\r\n init: function (itemSelector, isTableItem, data) {\r\n var me = this;\r\n\r\n me._super(itemSelector);\r\n me._jObject = $(itemSelector);\r\n\r\n if (!isTableItem) {\r\n me.id = me._jObject.attr('id');\r\n me.name = me._jObject.find(\".objectname\").text();\r\n\r\n me.kind = me._jObject.attr('kind').toUpperCase();\r\n\r\n if (me.kind !== 'VER') {\r\n me.type = objectKindToObjectType(me.kind);\r\n }\r\n me.referenceName = me.referenceCode = me._jObject.attr('compcode');\r\n me.isSelected = me._jObject.find('input:first').is(':checked');\r\n\r\n } else {\r\n $.extend(me, data);\r\n }\r\n\r\n me._setupBindings();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n className: \"ListItem\",\r\n id: null,\r\n name: null,\r\n kind: null,\r\n type: null,\r\n referenceName: null,\r\n referenceCode: null,\r\n isSelected: false,\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установка событий. При щелчке на чекбокс, вызываем событие у всего списка, чтобы удобно было менять состояние кнопок тулбара например.\r\n * @private\r\n * @return {WebAccess.components.wrappers.objectList.ListItem}\r\n */\r\n _setupBindings () {\r\n let me = this;\r\n this._jObject\r\n .find('input.chk')\r\n .off('change.objectList itemChecked')\r\n .on('change.objectList itemChecked', function () {\r\n let jCheckboxObject = $(this);\r\n if (jCheckboxObject.is(':checked')) {\r\n global.current.objectList.fire('itemSelect', me);\r\n } else {\r\n global.current.objectList.fire('itemUnSelect', me);\r\n }\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать иконку связанных объектов.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ListItem#showBindIcon\r\n * @return {WebAccess.components.wrappers.objectList.ListItem} Объект класса ListItem.\r\n * @since 5.1.0.1523\r\n */\r\n showBindIcon: function () {\r\n this._jObject.find('.object-list-item__addicon_type_bound').show();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Скрыть элемент списка.\r\n * @method WebAccess.components.wrappers.objectList.ListItem#hide\r\n * @return {WebAccess.components.wrappers.objectList.ListItem} Объект класса ListItem.\r\n */\r\n hide: function () {\r\n this._jObject.hide();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать элемент списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ListItem#show\r\n * @return {WebAccess.components.wrappers.objectList.ListItem} Объект класса ListItem.\r\n */\r\n show: function () {\r\n this._jObject.show();\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.components.wrappers.objectList.ListItem = ListItem;\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n\r\n/**\r\n* Элемент списка объектов. \r\n* \r\n* @class WebAccess.components.wrappers.objectList.CustomWorkListItem\r\n* @since 5.3.0.1010\r\n* @extends ListItem\r\n* @property {string} id ИД объекта\r\n* @property {string} name Имя объекта\r\n* @property {string} kind Тип объекта. Например, задача, задание, документ\r\n* @param {string} itemSelector Существующий элемент списка\r\n* @param {boolean} isTableItem Признак того, что текущий элемент является строкой таблицы\r\n*/\r\n(function (global) {\r\n\r\n var CustomWorkListItem = WebAccess.components.wrappers.objectList.ListItem.extend({\r\n /**\r\n * Удаляет у задания стиль непрочитанного задания.\r\n * @returns {WebAccess.components.wrappers.objectList.CustomWorkListItem} \r\n */\r\n removeUnreadStyle: function () {\r\n this._jObject.removeClass('unread');\r\n return this;\r\n },\r\n /**\r\n * Добавляет к заданию стиль непрочитанного задания.\r\n * @returns {WebAccess.components.wrappers.objectList.CustomWorkListItem} \r\n */\r\n addUnreadStyle: function () {\r\n this._jObject.addClass('unread');\r\n return this;\r\n },\r\n /**\r\n * Возвращает признак прочитанности задания.\r\n * @returns {boolean} \r\n */\r\n isUnread: function () {\r\n return this._jObject.hasClass('unread');\r\n }\r\n });\r\n\r\n global.components.wrappers.objectList.CustomWorkListItem = CustomWorkListItem;\r\n})(window.WebAccess);","'use strict';\r\n/**\r\n * Выбирает объект из списка с помощью установки переключателя.\r\n *\r\n * @event WebAccess.components.wrappers.objectList.ObjectList#onSelect\r\n * @param {WebAccess.components.wrappers.objectList.ListItem} item Объект списка-переключатель, который был установлен в текущий момент\r\n * @param {WebAccess.components.wrappers.objectList.ListItem[]} checkedItems Все выбранные объекты списка\r\n * @example\r\n *\r\n * WA.current.objectList.bind('onSelect', function (last, allItems) {\r\n * \r\n * console.log(last.name); //Вернет имя выбранного элемента в списке.\r\n * \r\n * //Вернет имена всех выделенных в текущий момент элементов в списке.\r\n * for (var i =0; i < allItems.length; i++) {\r\n * console.log(allItems[i].name);\r\n * }\r\n * });\r\n */\r\n\r\n/**\r\n * Предоставляет работу со списками объектов.\r\n * Например, получить список отфильтрованных объектов – задач, заданий и уведомлений в проводнике, выделить объекты в списке закладок,\r\n * снять выделение с элементов табличной части справочника.\r\n *\r\n * @class WebAccess.components.wrappers.objectList.ObjectList\r\n * @property {string} containerSelector Блок, содержащий список\r\n * @property {string} objectSelector Элемент списка\r\n * @fires WebAccess.components.wrappers.objectList.ObjectList#onSelect Вызывается после того, как был выбран объект из списка\r\n * @fires WebAccess.components.wrappers.objectList.ObjectList#onChange Вызывается после внесения изменений в состав списка\r\n * @since 5.0.0.4102\r\n */\r\n\r\n(function (global) {\r\n\r\n\r\n var ObjectList = BaseObject.extend({\r\n className: 'ObjectList',\r\n\r\n init(containerSelector) {\r\n this._super(containerSelector);\r\n\r\n this.containerSelector = '#main_container,#Attachments';\r\n this._jMainContainer = $(this.containerSelector);\r\n\r\n this._setupBindings();\r\n this._getType();\r\n\r\n this.getItems();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n containerSelector: '',\r\n objectSelector: '.List',\r\n _isAllSelected: false,\r\n _items: {},\r\n _jMainContainer: null,\r\n _jSearchTarget: null,\r\n _isTable: false,\r\n _selectedItemsCache: [],\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает произвольное содержимое вместо текущего списка объектов.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.setHtml\r\n * @return {WebAccess.components.wrappers.objectList} Специальный deferred-объект.\r\n */\r\n setHtml(html) {\r\n this._jMainContainer.html(`
    ${html}
    `);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает элементы списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getItems\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n getItems() {\r\n let items = {};\r\n\r\n this._jSearchTarget = this._jMainContainer.find(this.objectSelector);\r\n if (this._isTable) {\r\n this._jSearchTarget = this._getItemsElementsInTable(this._jSearchTarget);\r\n }\r\n\r\n let obj;\r\n for(let searchTarget of this._jSearchTarget.toArray()) {\r\n let jSearchTarget = $(searchTarget);\r\n if (jSearchTarget.hasClass('Task_obj') || jSearchTarget.hasClass('Job_obj')) {\r\n obj = new global.components.wrappers.objectList.CustomWorkListItem(searchTarget, this._isTable);\r\n } else {\r\n obj = new global.components.wrappers.objectList.ListItem(searchTarget, this._isTable);\r\n }\r\n\r\n if (obj.id) {\r\n items[obj.id] = obj;\r\n }\r\n }\r\n\r\n this._items = items;\r\n return items;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n isAllItemsSelected() {\r\n return this._isAllSelected;\r\n },\r\n\r\n /**\r\n * Получает объекты списка, отфильтрованные селектором.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getFilteredItems\r\n * @param {string} [filterSelector = this.objectSelector] jQuery-селектор для фильтрации списка элементов.\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]} Специальный deferred-объект.\r\n */\r\n getFilteredItems(filterSelector = this.objectSelector) {\r\n let filteredItems = this._jMainContainer.find(filterSelector).toArray();\r\n\r\n return filteredItems.reduce((result, element) => {\r\n let item = $(element);\r\n let newItem = this._getItemIdByjObject(item);\r\n if (newItem) {\r\n result.push(newItem);\r\n }\r\n return result;\r\n }, []);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить элементы из списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.removeItems\r\n * @param {object} links Список ссылок для удаления.\r\n * @param {boolean} [needUpdateTree = false] Признак необходимости обновления дерева папок.\r\n */\r\n removeItems(links, needUpdateTree = false) {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n let selector;\r\n $.each(links, (_, l) => {\r\n selector = `#${l.id}.folder_item`;\r\n if (links && links[0] && links[0].type && links[0].type === OBJECT_TYPE.ANY) {\r\n selector = '.folder_item';\r\n }\r\n\r\n var linkKind = l.kind ? l.kind.toLowerCase() : objectTypeToString(l.type).toLowerCase();\r\n $(selector).each((index, link) => {\r\n let me = $(link);\r\n let elementKind = me.attr('kind').toLowerCase();\r\n\r\n if (elementKind === linkKind || linkKind === 'any') {\r\n if (elementKind === 'job' || elementKind === 'task' || elementKind === 'fol') {\r\n needUpdateTree = true;\r\n }\r\n me.remove();\r\n }\r\n });\r\n });\r\n\r\n if (needUpdateTree) {\r\n WA.CR.folderTree.update(function () {\r\n document.title = WA.CR.folderTree.getCurrentFolderName();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Получает выделеннные элементы списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getSelectedElements\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n getSelectedItems() {\r\n if (!this._selectedItemsCache.length) {\r\n this._selectedItemsCache = this.getFilteredItems('.selected');\r\n }\r\n\r\n return this._selectedItemsCache;\r\n },\r\n\r\n /**\r\n * Получает невыделеннные элементы списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getUnselectedItems \r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n * @since 5.6.0\r\n */\r\n getUnselectedItems() {\r\n return this.getFilteredItems(':not(.selected)');\r\n },\r\n\r\n /**\r\n * Выделяет все объекты списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.selectAll\r\n * @return {WebAccess.current.objectList}\r\n */\r\n selectAll() {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n this._isAllSelected = true; \r\n this.setCheckedForFilteredItems(':not(.selected)', true);\r\n HideTopSpinner(L('ITEMS_SELECETED', GetRowsCount()));\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выделяет элемент списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.selectItemByID\r\n * @return {WebAccess.current.objectList}\r\n */\r\n selectItemByID(id) {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n this.setCheckedForFilteredItems('#' + id + '.List', true);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выделяет элемент списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.selectItem\r\n * @return {WebAccess.current.objectList}\r\n */\r\n selectItem(link) {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n this.selectItemByID(link.id);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Снимает выделение со всех элементов списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.deselectAll\r\n * @return {WebAccess.current.objectList} Специальный deferred-объект.\r\n */\r\n deselectAll() {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n this._isAllSelected = false;\r\n this.setCheckedForFilteredItems('.selected', false);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Снимает выделение или, наоборот, выделяет все объекты списка в зависимости от их текущего состояния.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.toggleAll\r\n * @return {WebAccess.current.objectList} Специальный deferred-объект.\r\n */\r\n toggleAll() {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n if (!$('#chkAll').prop('checked')) {\r\n this.deselectAll();\r\n } else {\r\n this.selectAll();\r\n }\r\n $('#scroller').redraw();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Снятие или выделение элемента из списка объектов.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList#toggleItem\r\n * @param {object} jItemCheckBox jQuery-объект чекбокса выделяемого элемента.\r\n * @param {object} [jItem] jQuery-объект выделяемого элемента списка.\r\n * @param {bool} [isChecked] True - необходимо выделить элемент, False - снять выделение.\r\n */\r\n toggleItem(jItemCheckBox, jItem, isChecked) {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n // Если не указан jQuery-объект элемента списка, найдем его\r\n if (!jItem) {\r\n jItem = jItemCheckBox.parents('.List');\r\n }\r\n\r\n // Если не указана отмеченность элемента, определим ее\r\n if (typeof isChecked === 'undefined') {\r\n isChecked = !jItem.hasClass('selected');\r\n }\r\n\r\n if (isChecked) {\r\n jItem.addClass('selected');\r\n } else {\r\n jItem.removeClass('selected');\r\n }\r\n jItemCheckBox.prop('checked', isChecked);\r\n\r\n jItemCheckBox.trigger('itemChecked', []);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инвертирует выделение всех объектов списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.invertSelection\r\n * @return {WebAccess.current.objectList} Специальный deferred-объект.\r\n */\r\n invertSelection() {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n var jCheckedItemsLength = this._jSearchTarget.filter('.selected').length;\r\n // Если небыло ничего выбранно и нажали на инвертировать выделение, то выделяем все.\r\n this._isAllSelected = (jCheckedItemsLength === 0);\r\n this.setCheckedForFilteredItems('', 'toggle');\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n executeContentAction(actionName) {\r\n let folderLink = new WA.Link(WA.CR.ID, OBJECT_TYPE.FOLDER, '');\r\n return WA.actions.executeContentAction(actionName, folderLink);\r\n },\r\n\r\n /**\r\n * Устанавливает или снимает выделение с элементов списка, отфильтрованных filterSelector.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.setCheckedForFilteredItems \r\n */\r\n setCheckedForFilteredItems(filterSelector, isChecked) {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n\r\n // Получить список компонент\r\n let jItems = this._jMainContainer.find(this.objectSelector);\r\n if (filterSelector) {\r\n jItems = jItems.filter(filterSelector);\r\n }\r\n\r\n // Получить чекбоксы\r\n let jItemCheckboxes = jItems.find('input');\r\n jItemCheckboxes.each((index, checkbox) => {\r\n let jItemCheckBox = $(checkbox);\r\n let currentItemIsChecked;\r\n if (isChecked === 'toggle') {\r\n currentItemIsChecked = jItemCheckBox.is(':checked');\r\n } else {\r\n currentItemIsChecked = isChecked;\r\n }\r\n this.toggleItem(jItemCheckBox, jItems.eq(index), currentItemIsChecked);\r\n });\r\n jItems.redraw();\r\n UpdateSelectionNumbers();\r\n let lastItemId = this._getItemIdByjObject(jItems.last());\r\n this.fire(\r\n 'onSelect',\r\n lastItemId,\r\n this.getSelectedItems()\r\n );\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Тип списка: таблица или нет.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._getType\r\n * @private\r\n * @return {boolean}\r\n */\r\n _getType() {\r\n return this._isTable = !!this._jMainContainer && !!this._jMainContainer.attr('class') && this._jMainContainer.attr('class').indexOf('slickgrid') !== -1;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установка событий, при кликах на чекбоксы. Чтобы срабатывали глобальные события.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._setupBindings\r\n * @private\r\n * @return {WebAccess.current.objectList}\r\n */\r\n _setupBindings() {\r\n this.bind('itemsChange', () => {\r\n this._onItemsChanged();\r\n });\r\n\r\n this.bind('itemSelect', (item) => { \r\n item.isChecked = true; \r\n if (!this._getType()) { \r\n let allItemsCount = GetRowsCount() || WA.CR.objectList.getFilteredItems().length; \r\n if (this.getSelectedItems().length === +allItemsCount) {\r\n $('#chkAll').prop('checked', true); \r\n this._isAllSelected = true; \r\n }\r\n }\r\n this._onItemSelected(item);\r\n });\r\n\r\n this.bind('itemUnSelect', (item) => {\r\n // Для обновления значений в кэше установим, что кэш устарел\r\n this._selectedItemsCache = [];\r\n item.isChecked = false;\r\n if (!this._getType()) {\r\n $('#chkAll').prop('checked', false);\r\n } \r\n this._onItemSelected(item);\r\n });\r\n \r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * При AJAX автоподгрузке элементов, надо обновлять список объектов.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._onItemsChanged\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n _onItemsChanged() {\r\n let items = this.getItems();\r\n this.fire(\r\n 'onChange',\r\n this.getSelectedItems(),\r\n items,\r\n );\r\n return items;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//1\r\n\r\n /**\r\n * При клике на чекбокс, вызовем свое событие.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._onItemSelected\r\n * @return {WebAccess.current.objectList}\r\n */\r\n _onItemSelected(item) {\r\n this.fire(\r\n 'onSelect',\r\n item,\r\n this.getSelectedItems(),\r\n );\r\n return this;\r\n },\r\n\r\n /**\r\n * Получает элементы списка отфильтрованные селектором.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._onItemSelected\r\n * @return {WebAccess.components.wrappers.objectList.ListItem}\r\n */\r\n _getItemIdByjObject(jObject) {\r\n const id = jObject.attr('id');\r\n return this._items[id];\r\n },\r\n\r\n /**\r\n * Получает элементы таблицы.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._getItemsElementsInTable\r\n * @params {object} Список элементов, в котором следует произвести поиск.\r\n * @return {jQuery}\r\n */\r\n _getItemsElementsInTable(items) {\r\n return items\r\n .not('.dxgvSelectedRow')\r\n .not('.dxgvGroupRow')\r\n .not('.dxgvEmptyDataRow');\r\n }\r\n\r\n });\r\n\r\n global.CMP.wrappers.objectList.ObjectList = ObjectList;\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n/** \r\n* Предоставляет работу со списками объектов в проводнике. \r\n* Например, получить список отфильтрованных объектов – задач, заданий и уведомлений в проводнике, выделить объекты в списке закладок, \r\n* снять выделение с элементов табличной части справочника.\r\n*\r\n* @class WebAccess.components.wrappers.objectList.FolderList\r\n* @since 5.2.0.2000\r\n*/\r\n\r\n(function (global) {\r\n\r\n var FolderList = global.CMP.wrappers.objectList.ObjectList.extend({\r\n state: null,\r\n maxItemsCount: 0,\r\n\r\n init: function () {\r\n var me = this;\r\n me._super.apply(me, arguments);\r\n this.maxItemsCount = window.g_MaxRowsPerPage || EXPLORER.MAX_OBJECT_ROWS_COUNT;\r\n me.state = {\r\n likeFilterValue: '',\r\n likeFilterRequisites: null,\r\n predefinedFilter: null,\r\n sort: null,\r\n sortIsAsc: true,\r\n isShowFolders: null\r\n }\r\n },\r\n\r\n setPredefinedFilter: function (name) {\r\n this.state.predefinedFilter = name;\r\n return this;\r\n },\r\n getPredefinedFilter: function () {\r\n return this.state.predefinedFilter;\r\n },\r\n isPredefinedFilterEmpty: function () {\r\n return !this.state.predefinedFilter;\r\n },\r\n\r\n setSort: function (name, sortIsAsc) {\r\n if (_.isObject(name)) {\r\n this.state.sort = name.name;\r\n this.state.sortIsAsc = name.sortIsAsc;\r\n } else {\r\n this.state.sort = name;\r\n this.state.sortIsAsc = sortIsAsc;\r\n }\r\n return this;\r\n },\r\n getSort: function () {\r\n return {\r\n name: this.state.sort,\r\n sortIsAsc: this.state.sortIsAsc\r\n }\r\n },\r\n\r\n setLikeFilter: function (likeValue, likeRequisites) {\r\n this.state.likeFilterValue = likeValue;\r\n this.state.likeFilterRequisites = likeRequisites;\r\n return this;\r\n },\r\n getLikeFilter: function () {\r\n return this.state.likeFilterValue;\r\n },\r\n getlikeFilterRequisites: function () {\r\n return this.state.likeFilterRequisites;\r\n },\r\n\r\n /**\r\n * Перезагружает содержимое текущей папки.\r\n *\r\n * @method reload\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n reload: function () {\r\n var me = this;\r\n var d = $.Deferred();\r\n\r\n var jMainContainer = $('#main_container');\r\n var jObjectContents = $('.object_contents');\r\n\r\n var currentScrollTop;\r\n if ($.scrollActive) {\r\n currentScrollTop = jMainContainer.offset().top - jObjectContents.offset().top;\r\n } else {\r\n currentScrollTop = jMainContainer.scrollTop();\r\n }\r\n var jFolderItems = jObjectContents.children('.folder_item');\r\n\r\n // Вычисляем какая страница сейчас показана на экране у пользователя. Округляем в большую сторону, чтобы если даже часть след. страницы показана, она загрузилась.\r\n var pageHeight = this.maxItemsCount * jFolderItems.first().outerHeight();\r\n var shownPage = (pageHeight === 0) ? 0 : Math.ceil(((currentScrollTop + jMainContainer.height()) / pageHeight));\r\n\r\n const folderId = WA.CR.getID();\r\n const url = new WA.URL();\r\n const folderMode = url.getParam(window.FOLDER_GRID.FOLDER_MODE_URL_PARAM) ||\r\n window.Core.pages.explorer.getCurrentViewFolderMode();\r\n\r\n me._loadAndInsertNewPage({\r\n folderId: folderId,\r\n folderMode: folderMode,\r\n pageNumber: 1,\r\n pageCountToLoad: shownPage,\r\n needUseFilters: true,\r\n needUseSort: true,\r\n afterLoadCallback: () => {\r\n // Смещаем скрол на предыдущее место.\r\n jMainContainer.scrollTop(currentScrollTop);\r\n d.resolve();\r\n window.Core.pages.explorer.updateOrApplyGridOptions(folderId, folderMode);\r\n }\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Загружает контент произвольной папки.\r\n *\r\n * @method loadFolderContent\r\n * @param {number} folderId ИД папки.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n loadFolderContent: function (folderId) {\r\n var d = $.Deferred();\r\n this._loadAndInsertNewPage({\r\n folderId: folderId,\r\n pageNumber: 1,\r\n pageCountToLoad: 1,\r\n needUseFilters: false,\r\n needUseSort: false,\r\n afterLoadCallback: function () {\r\n // Смещаем скрол в начало страницы.\r\n $('#main_container').scrollTop(0);\r\n d.resolve();\r\n }\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n // Загружает и вставляет в HTML-контейнер нужную страницу объектов.\r\n _loadAndInsertNewPage: function (params) {\r\n var me = this;\r\n var jObjectContents = $('.object_contents');\r\n\r\n var nextPage;\r\n var itemsToLoad;\r\n if (params.pageCountToLoad && params.pageCountToLoad > 0) {\r\n itemsToLoad = params.pageCountToLoad * this.maxItemsCount;\r\n // Если грузим больше объектов чем на 1 страницы, то учитываем это в след. странице.\r\n nextPage = params.pageCountToLoad + 1;\r\n } else {\r\n itemsToLoad = this.maxItemsCount;\r\n nextPage = params.pageNumber + 1;\r\n }\r\n\r\n WA.CR.ID = params.folderId;\r\n jObjectContents.data('nextPage', nextPage);\r\n\r\n me._loadPage(params.folderId, params.pageNumber, itemsToLoad, params.needUseFilters, params.needUseSort).done(function (html) {\r\n if (!CheckForLoginPage(html)) {\r\n\r\n jObjectContents.html(html);\r\n\r\n if ($.isFunction(params.afterLoadCallback)) {\r\n params.afterLoadCallback.call(me);\r\n }\r\n\r\n //HACK: Для IE11 не работают действие по наименованию записанные в атрибуте onclick. Такой хак заставляет их работать.\r\n if (WA.ENV.browser.name === 'IE' && WA.ENV.browser.major === '11') {\r\n $.each(jObjectContents.find('div[onclick]'), function () {\r\n var onclick = $(this).attr('onclick');\r\n $(this).attr('onclick', onclick + ';');\r\n });\r\n }\r\n\r\n jObjectContents.children().first().addClass('hover');\r\n if (!jObjectContents.children('.folder_item').length) {\r\n let emptyMessage = L('EMPTY');\r\n let folderOrFilter = 'folder';\r\n if (params.needUseFilters && me.getPredefinedFilter() || me.getLikeFilter()) {\r\n emptyMessage = L('EMPTY_WITH_FILTER');\r\n folderOrFilter = 'filter';\r\n }\r\n jObjectContents.append(`\r\n
    \r\n
    \r\n
    \r\n
    ${emptyMessage}
    \r\n
    \r\n
    \r\n `);\r\n }\r\n EntityListInit(jObjectContents, true);\r\n if (params.needUseFilters) {\r\n InitObjectContentsAutoLoad(me.state.likeFilterValue, me.state.likeFilterRequisites);\r\n } else {\r\n InitObjectContentsAutoLoad();\r\n }\r\n\r\n me.updateState();\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Загружает HTML-кода pageNumber страницы с элементами из папки.\r\n *\r\n * @method _loadPage\r\n * @param {number} folderId ИД папки.\r\n * @param {number} pageNumber Номер страницы в выборке.\r\n * @param {number} [opt_itemsToLoad = -1] Число элементов для выборки.\r\n * @param {boolean} [opt_needUseFilters = true] Признак необходимости использования фильтрации.\r\n * @param {boolean} [opt_needUseSort = true] Признак необходимости использования сотрировки.\r\n * @return {Deferred} HTML разметки страницы с элементами из папки.\r\n * @private\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _loadPage: function (folderId, pageNumber, opt_itemsToLoad, opt_needUseFilters, opt_needUseSort) { \r\n var me = this;\r\n var def = $.Deferred();\r\n\r\n var jObjectContents = $('.object_contents');\r\n var uid = '';\r\n if (jObjectContents.data('uid')) {\r\n uid = jObjectContents.data('uid');\r\n }\r\n\r\n var newQueryParams = {\r\n c: jObjectContents.data('component'),\r\n id: folderId,\r\n page: pageNumber,\r\n itemsToLoad: opt_itemsToLoad || -1,\r\n ctrl: encodeURIComponent(jObjectContents.attr('id')),\r\n uid: uid\r\n }; \r\n\r\n if (opt_needUseFilters !== false) {\r\n $.extend(newQueryParams, {\r\n filterValue: me.state.likeFilterValue,\r\n filterReq: me.state.likeFilterRequisites,\r\n predefinedFilter: me.state.predefinedFilter\r\n });\r\n }\r\n\r\n if (opt_needUseSort !== false) {\r\n $.extend(newQueryParams, {\r\n sort: (me.state.sortIsAsc ? '' : '-') + me.state.sort\r\n });\r\n }\r\n\r\n var currentQueryParams = new WA.URL(location.search.substr(1));\r\n currentQueryParams.removeParam('sort');\r\n currentQueryParams.removeParam('id');\r\n currentQueryParams.removeParam('fpath');\r\n\r\n if (!currentQueryParams.getParam(window.FOLDER_GRID.FOLDER_MODE_URL_PARAM)) {\r\n newQueryParams[ window.FOLDER_GRID.FOLDER_MODE_URL_PARAM ] = window.Core.pages.explorer.getCurrentViewFolderMode();\r\n }\r\n\r\n ShowTopSpinner();\r\n $.ajax({\r\n type: \"GET\",\r\n dataType: \"html\",\r\n url: \"DynControl.ashx?\" + currentQueryParams.asString() + '&' + $.param(newQueryParams),\r\n cache: false,\r\n success: function (res) {\r\n HideTopSpinner('', 0);\r\n def.resolve(res);\r\n },\r\n error: function (err) {\r\n HideTopSpinner('', 0);\r\n def.reject(err);\r\n }\r\n });\r\n\r\n return def.promise();\r\n },\r\n\r\n /**\r\n * Обновляет внутренее состояние списка и перестраивает объект КОМ.\r\n * @param {object} state Состояние объекта. \r\n */\r\n updateState: function (state) {\r\n var me = this;\r\n if (state) $.extend(me.state, state);\r\n\r\n //Обновим объект клиентской ОМ\r\n me.fire(\"itemsChange\");\r\n me.fire(\"itemUnSelect\", {});\r\n\r\n //Сбросим переключатель выделения всех объектов.\r\n me._isAllSelected = false;\r\n },\r\n\r\n /**\r\n * Устанавливает флаг отображения папок в состоянии объекта.\r\n * @param {} value Значение флага. \r\n */\r\n setIsShowFolders: function(value) {\r\n this.state.isShowFolders = value;\r\n },\r\n\r\n /**\r\n * Необходимо ли показывать папки.\r\n * \r\n * @returns {boolean} \r\n */\r\n isShowFolders: function() {\r\n return !!this.state.isShowFolders;\r\n }\r\n });\r\n\r\n global.CMP.wrappers.objectList.FolderList = FolderList;\r\n\r\n})(window.WebAccess);","\"use strict\";\r\n/**\r\n* Предоставляет работу со списками объектов в проводнике.\r\n* Например, получить список отфильтрованных объектов – задач, заданий и уведомлений в проводнике, выделить объекты в списке закладок,\r\n* снять выделение с элементов табличной части справочника.\r\n*\r\n* @class WebAccess.components.wrappers.objectList.ObjectsAsTable\r\n* @since 5.2.0.2004\r\n*/\r\n\r\n(function (global) {\r\n\r\n var ObjectsTable = global.CMP.wrappers.objectList.ObjectList.extend({\r\n className: 'ObjectsTable',\r\n\r\n init: function (containerSelector) {\r\n var me = this;\r\n me._items = {};\r\n me._selectedItems = {};\r\n me._super(containerSelector);\r\n Core.toolBars.main.enableCheckBoxOnItemsSelect();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n // Устанавливает ссылку на текущий грид.\r\n _setGrid: function () {\r\n var me = this;\r\n me._grid = Core.grid.reference;\r\n me._slickGrid = me._grid.grid;\r\n me._slickGridDataView = me._grid.dataView;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить элементы списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getItems\r\n * @comment Keit_B: в справке не нашла. Пока не трогаю.\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n getItems: function () {\r\n return this._items;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * При AJAX автоподгрузке элементов, надо обновлять список объектов.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._onItemsChanged\r\n * @private\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n _onItemsChanged: function () {\r\n var me = this;\r\n me._setGrid();\r\n var rowsData = me._slickGrid.getData().getItems();\r\n me._items = {};\r\n _(rowsData).each(function (rowData) {\r\n if (!isNaN(rowData.id)) {\r\n var itemData = {\r\n id: +rowData.id,\r\n name: rowData.__name,\r\n code: rowData.__code,\r\n kind: 'REF',\r\n type: objectKindToObjectType('REF'),\r\n referenceName: me._grid.state.ReferenceName,\r\n referenceCode: me._grid.state.ReferenceName,\r\n isSelected: true\r\n };\r\n var itemSelector = '#' + rowData.id;\r\n var jItem = $(itemSelector);\r\n if (jItem.hasClass('Task_obj') || jItem.hasClass('Job_obj')) {\r\n me._items[+rowData.id] = new global.components.wrappers.objectList.CustomWorkListItem(itemSelector, true, itemData);\r\n } else {\r\n me._items[+rowData.id] = new global.components.wrappers.objectList.ListItem(itemSelector, true, itemData);\r\n }\r\n }\r\n });\r\n me.fire(\"onChange\", me.getSelectedItems(), me._items);\r\n return me._items;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает выделеннные элементы списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getSelectedElements\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]}\r\n */\r\n getSelectedItems: function () {\r\n var me = this;\r\n me._setGrid();\r\n var selectedRowIds = me._slickGridDataView.getSelectedRowIds();\r\n\r\n // Сохраняем выделенные объекты в переменной для возможности получения их с любой страницы.\r\n // Формировать новый объект нужно, т.к. галочки могут быть сняты, а грид возвращает всегда только текущие выделенные.\r\n var newSelectedItemsData = {};\r\n _(selectedRowIds).each(function (rowIdStr) {\r\n if (typeof rowIdStr !== \"undefined\") {\r\n var rowId = +rowIdStr;\r\n newSelectedItemsData[rowId] = me._items[rowId] || me._selectedItems[rowId];\r\n }\r\n });\r\n me._selectedItems = newSelectedItemsData;\r\n\r\n return _.toArray(me._selectedItems);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * При клике на чекбокс, вызовем свое событие.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList._onItemSelected\r\n * @private\r\n * @return {WebAccess.current.objectList}\r\n */\r\n _onItemSelected: function (item) {\r\n this.fire('onSelect', item, this.getSelectedItems());\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выделить все объекты списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.selectAll\r\n * @return {WebAccess.current.objectList}\r\n */\r\n selectAll: function () {\r\n var me = this;\r\n me._isAllSelected = true;\r\n\r\n me._setGrid();\r\n var rowsData = me._slickGrid.getData().getItems();\r\n var selectedRowNums = _.range(rowsData.length);\r\n me._slickGrid.setSelectedRows(selectedRowNums);\r\n\r\n me._raiseOnSelectEvent('last');\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Снять выделение со всех элементов списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.deselectAll\r\n * @return {WebAccess.current.objectList} Специальный deferred-объект.\r\n */\r\n deselectAll: function () {\r\n var me = this;\r\n me._isAllSelected = false;\r\n\r\n me._setGrid();\r\n me._slickGrid.setSelectedRows([]);\r\n\r\n me._raiseOnSelectEvent(null);\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Выделить элемент списка.\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.selectAll\r\n * @return {WebAccess.current.objectList}\r\n */\r\n selectItemByID: function (id) {\r\n var me = this;\r\n\r\n me._setGrid();\r\n var selectedRowNums = me._slickGrid.getSelectedRows();\r\n selectedRowNums.push(me._slickGrid.getData().getIdxById(+id));\r\n me._slickGrid.setSelectedRows(selectedRowNums);\r\n\r\n me._raiseOnSelectEvent(me._items[+id]);\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инвертировать выделение всех объектов списка.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.invertSelection\r\n * @return {WebAccess.current.objectList} Специальный deferred-объект.\r\n */\r\n invertSelection: function () {\r\n var me = this;\r\n\r\n me._setGrid();\r\n\r\n var selectedRowNums = me._slickGrid.getSelectedRows();\r\n\r\n var rowsData = me._slickGrid.getData().getItems();\r\n var allItemNums = _.range(rowsData.length);\r\n\r\n var newSelectedRowNums = _.difference(allItemNums, selectedRowNums);\r\n me._slickGrid.setSelectedRows(newSelectedRowNums);\r\n\r\n me._raiseOnSelectEvent('last');\r\n\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _raiseOnSelectEvent: function (item) {\r\n var me = this;\r\n\r\n UpdateSelectionNumbers();\r\n var selected = me.getSelectedItems() || [];\r\n if (item === 'last') {\r\n var lastSelected = null;\r\n if (selected.length > 0) {\r\n lastSelected = selected[selected.length - 1];\r\n }\r\n me.fire('onSelect', lastSelected, selected);\r\n } else {\r\n me.fire('onSelect', item, selected);\r\n }\r\n },\r\n\r\n /**\r\n * Получить объекты списка, отфильтрованные селектором.\r\n *\r\n * @method WebAccess.components.wrappers.objectList.ObjectList.getFilteredItems\r\n * @return {WebAccess.components.wrappers.objectList.ListItem[]} Специальный deferred-объект.\r\n */\r\n getFilteredItems: function (filterSelector) {\r\n if (filterSelector === '.selected') {\r\n return this.getSelectedItems();\r\n }\r\n throw new Error(\"Not supported.\");\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.CMP.wrappers.objectList.ObjectsTable = ObjectsTable;\r\n\r\n})(window.WebAccess);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n/**\r\n* Базовый класс реквизита.\r\n*\r\n* @class WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @extends BaseObject\r\n* @property {string} name Имя реквизита\r\n* @property {string} calssName Имя класса\r\n* @property {string} fullName Полное имя реквизита. Оставлено для совместимости\r\n* @property {array} controlsIds Список ИД элементов управления\r\n* @property {array} controls Список элементов управления\r\n* @param {string} requisiteName Имя реквизита\r\n * @param {object|string} data Параметры элемента страницы, либо его селектор\r\n*/\r\n var BaseRequisite = BaseObject.extend({\r\n className: \"BaseRequisite\",\r\n\r\n name: \"\",\r\n fullName: '',\r\n hasCalculation: false,\r\n\r\n controlsIds: [],\r\n controls: [],\r\n _isCalculationDisabled: false,\r\n _isNew: false,\r\n _isChanged: false,\r\n _isCommited: false,\r\n _isDisabled: null,\r\n _data: null,\r\n _parent: null,\r\n _referenceViewName: '',\r\n Init: null,\r\n // Список всех Init для всех контролов реквизита. От них зависит глобальное событие Init.\r\n _allControlsInit: null,\r\n //---------------------------------------------------------------------//\r\n\r\n init: function (requisiteName, data, opt_parent) {\r\n this.Init = $.Deferred();\r\n this._allControlsInit = [];\r\n\r\n if (!$.isPlainObject(data)) {\r\n var selector = data;\r\n data = {\r\n controls: [selector],\r\n displayValue: \"\",\r\n isRequired: false,\r\n isRendered: true,\r\n isReadOnly: false,\r\n isSystem: false,\r\n value: \"\"\r\n }\r\n }\r\n\r\n this._parent = opt_parent;\r\n\r\n if (typeof (data) == 'object') {\r\n this._data = data;\r\n } else {\r\n return this._super(requisiteName);\r\n };\r\n\r\n this.hasCalculation = data.hasCalculation;\r\n this.name = requisiteName;\r\n this.fullName = requisiteName;\r\n\r\n if (this._data.row_id && this._data.sectionNumber) {\r\n this.fullName = format(\"{0}${1}${2}\", this._data.sectionNumber, this._data.row_id, this.fullName);\r\n };\r\n\r\n this.controlsIds = this._data.controls || [];\r\n this._type = data.type;\r\n this._referenceViewName = data.referenceView;\r\n\r\n this.controls = this._getControls();\r\n this._isDisabled = this.isDisabled(); \r\n this._super(this.controls, true);\r\n this._bindEvents();\r\n this._bindUnHighlightOnChange(); // Не в _bindEvents, т.к. _bindEvents переопределяется в других классах не вызывая родительский.\r\n this._isChanged = false;\r\n this._isCommited = false;\r\n this._raiseInitEvent();\r\n },\r\n\r\n /**\r\n * Генерирует событие инициализаии реквизита.\r\n * @private\r\n */\r\n _raiseInitEvent: function () {\r\n var me = this;\r\n\r\n $.when.apply(null, me._allControlsInit).then(function () {\r\n me.Init.resolve();\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Инициализация снятия подсветки при изменении реквизита (#108403)\r\n * @private\r\n * @since 5.0.0.2008\r\n * @return WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n */\r\n _bindUnHighlightOnChange: function () {\r\n var me = this;\r\n me.bind('change', me.unHighlight, me);\r\n return me;\r\n },\r\n\r\n /**\r\n * Признак отключения серверных вычислений на реквизите.\r\n\t *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isCalculationDisabled\r\n * @return {boolean}\r\n * @since 5.2.0.2014\r\n */\r\n isCalculationDisabled: function () {\r\n return this._isCalculationDisabled;\r\n },\r\n\r\n /**\r\n * Возвращает представление справочника.\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#referenceViewName\r\n * @return {string} Строка, содержащая представление справочника.\r\n\t* @since 5.5.0.9023\r\n */\r\n referenceViewName: function () {\r\n return this._referenceViewName;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак, что реквизит системный.\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isSystem\r\n * @return {boolean} True – реквизит системный, иначе False.\r\n\t* @since 5.5.0.9000\r\n */\r\n isSystem: function () {\r\n return this._data.isSystem;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает текст всплывающей подсказки.\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#setTooltip\r\n\t * @param {string} value Текст всплывающей подсказки.\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.2014\r\n */\r\n setTooltip: function (value) {\r\n $('.tooltip[for=\"' + this.name + '\"]').qtip('option', 'content.text', value);\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает текст всплывающей подсказки.\r\n \t*\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#getTooltip\r\n * @return {string} Текст всплывающей подсказки.\r\n * @since 5.2.0.2014\r\n */\r\n getTooltip: function () {\r\n var tooltip = $('.tooltip[for=\"' + this.name + '\"]').qtip('option', 'content.text');\r\n return (!_.isString(tooltip)) ? '' : tooltip;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отключает серверные вычисления на реквизите.\r\n\t *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#disableCalculation\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.2014\r\n */\r\n disableCalculation: function () {\r\n this._isCalculationDisabled = true;\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Включает серверные вычисления на реквизите.\r\n\t *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#enableCalculation\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.2014\r\n */\r\n enableCalculation: function () {\r\n this._isCalculationDisabled = false;\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает тип реквизита.\r\n\t*\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#getType\r\n * @return {REQUISITE_TYPE} Тип реквизита.\r\n * @since 5.2.0.2014\r\n */\r\n getType: function () {\r\n return requisiteTypeFromString(this._type) || this._type;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * @ignore\r\n */\r\n isNew: function () {\r\n return this._isNew;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отобразить спиннер внутри контрола реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_showSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n */\r\n _showSpinner: function () {\r\n var me = this;\r\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\r\n jControl.parent().append('
    ');\r\n }\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Скрыть спиннер\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_hideSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\r\n jControl.parent().find('.circle-spinner').remove();\r\n }\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Инициализация событий\r\n * @private\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindEvents\r\n * @since 5.0.0.7100\r\n * @return WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n */\r\n _bindEvents: function () {\r\n if (this.controls.length === 0) return this;\r\n\r\n var me = this;\r\n _(me.controls).each(function (jControl) {\r\n me._bindControlEvents(jControl);\r\n });\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * @private\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindControlEvents\r\n * @since 5.0.0.7100\r\n */\r\n _bindControlEvents: function (jControl) {\r\n var me = this;\r\n var reqFullName = me.fullName;\r\n\r\n jControl.off('change.BaseRequisite').on('change.BaseRequisite', function (ev) {\r\n var value = me.getValue($(this));\r\n var displayValue = me.getDisplayValue($(this));\r\n me._fireChange(reqFullName, value, displayValue, ev);\r\n });\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Вызвать событие изменения\r\n * @private\r\n */\r\n _fireChange: function (reqFullName, value, displayValue, opt_ev) {\r\n var me = this;\r\n me.touch();\r\n me.fire(\"change\", this, opt_ev, { name: reqFullName, value: value, displayValue: displayValue });\r\n },\r\n\r\n /**\r\n * Получить контролы реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_getControls\r\n * @since 5.0.0.7100\r\n * @private\r\n * @return {array} список jquery объектов\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i];\r\n var jControl = $('#' + id);\r\n res.push(jControl);\r\n }\r\n return res;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает значение подписи для реквизита.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseRequisite#getLabel\r\n * @return {string} Строка, содержащая значение подписи для реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n getLabel: function () {\r\n if (this.controls.length === 0) return null;\r\n var jLabel = this._getLabelForControl(this.controls[0]);\r\n return jLabel.text();\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает подпись для реквизита.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseRequisite#setLabel\r\n * @param {string} text Текст подписи\r\n * @return {WebAccess.components.wrappers.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n setLabel: function (text) {\r\n if (this.controls.length === 0) return this;\r\n for (var i = 0; i < this.controls.length; i++) {\r\n var jLabel = this._getLabelForControl(this.controls[0]);\r\n jLabel.text(text);\r\n }\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить контрол подписи.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_getLabelForControl\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {object}\r\n */\r\n _getLabelForControl: function (jControl) {\r\n var jC = jControl.parents('.Card_Element:first').prev('.CardForm_Label');\r\n if (jC.length) return jC;\r\n return jControl.parents('tr').eq(0).find('td.wizard-table__cell_type_label');\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#getValue\r\n * @return {string} Строка, содержащая значение реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n getValue: function (opt_jControl) {\r\n var value;\r\n if (this._data && this._data.isRendered === false) return this._data.value;\r\n var id;\r\n if (opt_jControl) id = opt_jControl.attr('id');\r\n value = this._getControlValue(id || this.controlsIds[0]);\r\n\r\n return value;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак видимости реквизита на форме.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isVisible\r\n * @return {boolean} True – реквизит отображается на форме, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isVisible: function () {\r\n if (this.controls.length > 0) {\r\n return this.controls[0].css('visibility') === 'visible';\r\n }\r\n return false;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак наличия элементов управления для реквизита на форме.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isRendered\r\n * @return {boolean} True – для реквизита присутствуют элементы управления на форме, иначе False.\r\n\t* @since 5.5.0.9003\r\n */\r\n isRendered: function() {\r\n return this._data.isRendered;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак изменения реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isChanged\r\n * @return {boolean} True – реквизит был изменен, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isChanged: function () {\r\n return this._isChanged;\r\n },\r\n\r\n /**\r\n * Признак, показывающий, были ли уже отправлены на сервер значения реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isCommited\r\n * @return {boolean} True – значение реквизита было отправлено, иначе False.\r\n * @since 5.7.0.1000\r\n */\r\n isCommited: function () {\r\n return this._isCommited;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить значение в поле по его имени.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_getControlValue\r\n * @since 5.0.0.7100\r\n * @private\r\n */\r\n _getControlValue: function (controlName) {\r\n var jControl = $(\"input#\" + controlName); //\r\n if (jControl.data('requisite')) { //\r\n return jControl.data('requisite').val();\r\n };\r\n return jControl.val();\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получает отображаемое значение реквизита.\r\n *\r\n * @fixme Не работает с детальными разделами.\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#getDisplayValue\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) {\r\n if (this._data && this._data.isRendered === false) return this._data.displayValue;\r\n if (this.controls.length === 0) return;\r\n\r\n var displayValue = \"\";\r\n var jReq = opt_jControl || this.controls[0];\r\n\r\n displayValue = this.getValue(opt_jControl);\r\n return displayValue;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Установка значений невидимых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_setInvisibleValues\r\n * @private\r\n * @param value {string} устанавливаемое значение\r\n * @param [opt_displayValue] {string} отображаемое значение\r\n * @param [opt_needTriggerResult] {string} вызывать триггер события change\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит\r\n * @since 5.0.0.7100\r\n */\r\n _setInvisibleValues: function (value, opt_displayValue, opt_needTriggerResult) {\r\n this._data.value = value;\r\n if (opt_displayValue) this._data.displayValue = opt_displayValue;\r\n this.touch();\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#setValue\r\n * @param value {string} Устанавливаемое значение реквизита\r\n * @param [opt_displayValue] {string} Отображаемое значение реквизита\r\n * @param [opt_needTriggerResult] {boolean} Признак необходимости вызова триггера события change\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n if (_.isUndefined(value)) return this;\r\n if (opt_displayValue && opt_displayValue[0] === '$') opt_displayValue = opt_displayValue.replace('$');\r\n\r\n opt_needTriggerResult = (opt_needTriggerResult !== false); //если не передан, то по умолчанию будет true.\r\n if (this.controls.length === 0) return this._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\r\n\r\n var val = opt_displayValue || value;\r\n var jControl;\r\n for (var i = 0; i < this.controls.length; i++) {\r\n jControl = this.controls[i];\r\n jControl.val(val);\r\n if (opt_displayValue) {\r\n jControl.attr(\"title\", opt_displayValue);\r\n } else {\r\n jControl.removeAttr('title');\r\n }\r\n if (opt_needTriggerResult) { jControl.change(); }\r\n };\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает отображаемое значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#setDisplayValue\r\n * @param value {string} Устанавливаемое значение реквизита\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n setDisplayValue: function (value) {\r\n this.setValue(this.getValue(), value);\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Делает реквизит недоступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#disable\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n disable() { \r\n $(this.controls).each((index, jControl) => {\r\n this._disableControl(jControl);\r\n });\r\n this._isDisabled = true;\r\n return this;\r\n }, \r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Делает реквизит доступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#enable\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n enable() { \r\n $(this.controls).each((index, jControl) => {\r\n this._enableControl(jControl);\r\n });\r\n this._isDisabled = false;\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает контролы реквизита недоступным для изменения, не меняя внутреннее свойство _isDisabled.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_disableControls \r\n * @internal\r\n * @since 5.7.0\r\n */\r\n _disableControls() {\r\n $(this.controls).each((index, jControl) => {\r\n this._disableControl(jControl);\r\n });\r\n return this;\r\n },\r\n\r\n /**\r\n * Делает контролы реквизита доступным для изменения, не меняя внутреннее свойство _isDisabled.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_enableControls \r\n * @internal\r\n * @since 5.7.0\r\n */\r\n _enableControls() { \r\n if (!this._isDisabled) {\r\n $(this.controls).each((index, jControl) => {\r\n this._enableControl(jControl);\r\n });\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Признак недоступности реквизита для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isDisabled\r\n * @return {boolean} True – реквизит недоступен для изменения, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isDisabled() {\r\n let isDisabled = false;\r\n $(this.controls).each((index, jControl) => {\r\n isDisabled = jControl.hasClass('Req_Disabled');\r\n });\r\n return isDisabled;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отключение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_disableControl\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _disableControl(jControl) {\r\n jControl.attr('readonly', 'readonly').addClass(\"Req_Disabled\").attr('tabindex', -1);\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Включение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_enableControl\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _enableControl(jControl) {\r\n jControl.removeAttr('readonly').removeClass(\"Req_Disabled\").removeAttr('tabindex');;\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Скрывает реквизит и его подпись.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#hide\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n hide: function () {\r\n if (this.controls.length === 0) return this;\r\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i].parents('.Card_Element:first, tr');\r\n jControl.add(jControl.prev('.CardForm_Label')).css('visibility', \"hidden\");\r\n };\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Отображает реквизит и его подпись.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#show\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n show: function () {\r\n if (this.controls.length === 0) return this;\r\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i].parents('.Card_Element:first, tr');\r\n jControl.add(jControl.prev('.CardForm_Label')).css('visibility', \"visible\");\r\n };\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Очищает значения реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#clear\r\n * @param [opt_needTriggerResult] {boolean} Признак необходимости вызова события change\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.0.0.7100\r\n */\r\n clear: function (opt_NeedTriggerResult) {\r\n this.setValue(\"\", \"\", opt_NeedTriggerResult);\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Добавляет иконку к элементу управления реквизита, за исключением реквизитов типа «Справочник» и «Множественный выбор».\r\n * Метод прикрепляет к тестовому полю действие для события, например, нажатие на иконку.\r\n * При наступлении этого события в код передаются данные о текущем реквизите.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseRequisite#setCustomAction\r\n * @param {string} reqName Имя реквизита\r\n * @param {string} tooltip Подсказка к реквизиту\r\n * @param {function} callback Функция, которая будет вызвана после нажатия на иконку реквизита.\r\n * В эту функцию первым параметром будет отправлена информация о реквизите.\r\n */\r\n setCustomAction: function (callback, opt_tooltip) {\r\n opt_tooltip = \"\" || opt_tooltip;\r\n var me = this;\r\n if (this.controls.length === 0) return this;\r\n\r\n //TODO Вынести в соответсвующие классы реквизитов.\r\n\r\n for (var i = 0; i < this.controls.length; i++) {\r\n var jReq = this.controls[i];\r\n var instance = jReq.data(\"ReferenceSelectInstance\");\r\n\r\n if (instance) {\r\n //Для реквизита типа справочник или мультивыбор\r\n var jReqIcon = jReq.parents(\".rs_SelItems_cont\").next(\".Req_Icon\");\r\n jReqIcon.unbind();\r\n jReqIcon.click(function () {\r\n var reqObj = {\r\n \"name\": me.name,\r\n \"value\": me.getValue(),\r\n \"displayValue\": me.getDisplayValue()\r\n };\r\n callback(reqObj);\r\n });\r\n } else {\r\n var jReq = this.controls[i].parent(\"span, div\");\r\n if (jReq.length > 0) {\r\n // Для текстового реквизита\r\n var jReqInput = this.controls[i];\r\n jReqInput.removeClass(\"text_align_right\");\r\n\r\n jReq.prepend(format('
    ', opt_tooltip));\r\n jReq.children(\".Req_Icon\").click(function () {\r\n var reqObj = {\r\n \"name\": me.name,\r\n \"value\": me.getValue(),\r\n \"displayValue\": me.getDisplayValue()\r\n };\r\n callback(reqObj);\r\n });\r\n } else WebAccess.raise(\"ERR_REQUISTE_NOT_FOUND_OR_IS_UNSUPPORTED\");\r\n }\r\n }\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * При смене значения в одном контроле оно должно примениться ко всем.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindMirrors\r\n * @private\r\n * @since 5.0.0.7100\r\n */\r\n _bindMirrors: function () {\r\n var me = this;\r\n if (me.controls.length > 1) {\r\n me.bind('change', function (context, ev, data) {\r\n me.setValue(data.value, data.displayValue, false);\r\n });\r\n }\r\n return this;\r\n },\r\n\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Признак обязательного заполнения реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isRequired\r\n * @return {boolean} True – реквизит обязателен для заполнения, иначе False.\r\n * @since 5.0.0.7100\r\n */\r\n isRequired: function () {\r\n return this._data.isRequired;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Подсвечивает реквизит.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#highlight\r\n * @param {string} [opt_color] Цвет поля, в котором указывается значение реквизита. Цвет указывается в виде десятичного или шестнадцатеричного числа.\r\n\t * Рамка поля всегда окрашивается в красный цвет\r\n * @param {integer} [opt_speed] Длительность подсвечивания поля, в котором указывается значение реквизита. Чем больше число, тем дольше поле подсвечивается\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.1300\r\n */\r\n highlight: function (opt_color, opt_speed) {\r\n var me = this;\r\n var speed = opt_speed || 300;\r\n\r\n var blink = function (jObject) {\r\n var prevColor = jObject.css('backgroundColor');\r\n var prevBorder = jObject.css('borderColor'); //Почему-то не работает\r\n\r\n var highlight = \"#F6DADA\";\r\n\r\n if (opt_color) {\r\n var colorLuminance = function (hex, lum) {\r\n // validate hex string\r\n hex = String(hex).replace(/[^0-9a-f]/gi, '');\r\n if (hex.length < 6) {\r\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\r\n }\r\n lum = lum || 0;\r\n\r\n // convert to decimal and change luminosity\r\n var rgb = \"#\", c, i;\r\n for (i = 0; i < 3; i++) {\r\n c = parseInt(hex.substr(i * 2, 2), 16);\r\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\r\n rgb += (\"00\" + c).substr(c.length);\r\n }\r\n return rgb;\r\n }\r\n jObject.animate({ backgroundColor: colorLuminance(opt_color, .4), borderColor: opt_color }, speed, function () {\r\n $(this).animate({ backgroundColor: prevColor, borderColor: prevBorder }, speed);\r\n });\r\n } else {\r\n jObject.addClass('Req_Error').animate({ backgroundColor: highlight }, 300, function () {\r\n $(this).animate({ backgroundColor: prevColor }, speed);\r\n });\r\n }\r\n return jObject;\r\n };\r\n\r\n for (var j = 0; j < me.controlsIds.length; j++) {\r\n (function (index) {\r\n var reqSelector = me.controlsIds[index];\r\n if (!reqSelector) return;\r\n\r\n var jEl = me._getJElementForHighlight(reqSelector);\r\n if (jEl) {\r\n blink(jEl);\r\n }\r\n })(j);\r\n }\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Снимает подсветку с реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#unHighlight\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.2008\r\n */\r\n unHighlight: function () {\r\n var me = this;\r\n\r\n for (var j = 0; j < me.controlsIds.length; j++) {\r\n var reqSelector = me.controlsIds[j];\r\n if (!reqSelector) continue;\r\n\r\n var jEl = me._getJElementForHighlight(reqSelector);\r\n if (jEl) {\r\n jEl.removeClass('Req_Error')\r\n .css('borderTopColor', '')\r\n .css('borderBottomColor', '')\r\n .css('borderLeftColor', '')\r\n .css('borderRightColor', ''); // Просто borderColor не получить http://stackoverflow.com/questions/9915966/jquery-cssborder-color-does-not-return-anything\r\n }\r\n }\r\n\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Возвращает элемент для подсветки.\r\n * @private\r\n */\r\n _getJElementForHighlight: function (reqSelector) {\r\n var reqChild = $('#' + reqSelector).find('input,textarea');\r\n if (reqChild.length > 0) {\r\n // Если реквизит текстовый\r\n return reqChild;\r\n } else {\r\n if (typeof (reqSelector) != \"undefined\") {\r\n // Если реквизит типа справочник\r\n var reqRef = $('#' + reqSelector);\r\n if (reqRef.length > 0) {\r\n var fakeInput = reqRef.parent().parent().parent().find('input.fakeInput:first');\r\n if (fakeInput.length > 0) {\r\n return fakeInput;\r\n } else {\r\n return reqRef;\r\n };\r\n };\r\n } else {\r\n // Если реквизит типа справочник в детальном разделе\r\n var fakereq = $('div[name=\"' + reqs[i] + '\"]');\r\n if (fakereq.length > 0) {\r\n return fakereq.find('input.fakeInput');\r\n };\r\n }\r\n }\r\n return null;\r\n },\r\n\r\n /**\r\n * Устанавливает признак isChanged в состояние true.\r\n * Не вызывает срабатывания событий change.\r\n *\r\n\t* @method WebAccess.components.wrappers.form.requisites.BaseRequisite#touch\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.1300\r\n */\r\n touch: function () {\r\n this._isChanged = true;\r\n this._isCommited = false;\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает признак isChanged в состояние false.\r\n\t*\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#setUntouched\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.2.0.2014\r\n */\r\n setUntouched: function () {\r\n this._isChanged = false;\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Устанавливает признак isCommited в состояние true.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#commit\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит.\r\n * @since 5.7.0.1000\r\n */\r\n commit: function () {\r\n this._isCommited = true;\r\n return this;\r\n },\r\n\r\n\r\n /**\r\n * Получает строковое представление реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#asString\r\n * @overrides BaseObject.asString\r\n * @return {string} Строковое представление реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n asString: function () {\r\n var me = this;\r\n return $.toJSON({\r\n name: me.name,\r\n fullName: me.fullName,\r\n value: me.getValue(),\r\n displayValue: me.getDisplayValue()\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает строку детального раздела, к которой относится реквизит.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#getRow\r\n * @return {WebAccess.components.wrappers.form.BaseTableLine} Строка детального раздела.\r\n */\r\n getRow: function () {\r\n var row = null;\r\n if (typeof this._parent.getTable !== 'undefined') {\r\n var table = this._parent.getTable();\r\n if (typeof table !== 'undefined') {\r\n row = table.rows[this._parent.id];\r\n }\r\n }\r\n\r\n return row;\r\n },\r\n\r\n /**\r\n * Получить список контролов с их SBRte-именами.\r\n *\r\n * @return {Object} Cписок контролов с их SBRte-именами.\r\n * @private\r\n */\r\n _getSbrteControls() {\r\n return this.controls.reduce((dictionary, jControl) => {\r\n const sbrteControlName = jControl.closest('div.Card_Element').attr('name');\r\n dictionary[sbrteControlName] = jControl;\r\n return dictionary;\r\n }, {});\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n }, {\r\n /**\r\n * Срабатывает после изменения реквизита.\r\n\t *\r\n * @event WebAccess.components.wrappers.form.requisites.BaseRequisite.EVENT.AFTER_CHANGE\r\n * @param {WebAccess.components.wrappers.form.requisites.BaseRequisite} Наследник объекта типа BaseRequisite в зависимости от того, к какому классу относится реквизит\r\n * @param {Event} event Исходное событие (оставлено для обратной совместимости с CardForm)\r\n * @param {Object} values Значение реквизита\r\n * @since 5.2.0.2014\r\n */\r\n EVENT: {\r\n AFTER_CHANGE: 'change',\r\n\r\n\r\n /**\r\n * Событие срабатывает, если данные в реквизите были изменены.\r\n *\r\n * @event WebAccess.components.wrappers.form.requisites.BaseRequisite.EVENT.CHANGE\r\n * @param {object} context Ссылка на экземпляр класса\r\n * @since 5.5.0.2201\r\n */\r\n CHANGE: 'change'\r\n }\r\n });\r\n\r\n global.WA.CMP.wrappers.form.requisites.BaseRequisite = BaseRequisite;\r\n})(window);\r\n","\"use strict\";\r\n\r\n/**\r\n* Реквизит карточки типа «Ссылка на запись справочника».\r\n*\r\n* @class WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {object} data Данные для инициализации реквизита\r\n* @since 5.5.0.1000\r\n*/\r\n(function (global) {\r\n\r\n /**\r\n * @inner\r\n * @since 5.5.0.1000\r\n */\r\n var onControlInitComplete = function (jControl, callback) {\r\n if (jControl.data('ReferenceSelectInstance')) {\r\n callback();\r\n } else {\r\n jControl.bind('Init', function () {\r\n callback();\r\n });\r\n }\r\n };\r\n\r\n var BaseObjectSelectRequisite = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\r\n className: \"BaseObjectSelectRequisite\",\r\n\r\n /**\r\n * Получить контролы реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_bindEvents\r\n * @private\r\n * @return {array} список jquery объектов\r\n * @since 5.5.0.1000\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i];\r\n var jControl = $('input#' + id);\r\n res.push(jControl);\r\n }\r\n\r\n return res;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Отобразить спиннер внутри контрола реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_showSpinner\r\n * @since 5.5.0.1000\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\r\n */\r\n _showSpinner: function () {\r\n var me = this;\r\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\r\n var jContainer = jControl.parents('.reference_requisite');\r\n jContainer.find('.Req_Icon').hide();\r\n jContainer.append('
    ');\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть спиннер\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_hideSpinner\r\n * @since 5.5.0.1000\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\r\n var jContainer = jControl.parents('.reference_requisite');\r\n jContainer.find('.Req_Icon').show(); //FIXME: Не всегда все иконки должны быть отображены\r\n jContainer.find('.circle-spinner').remove();\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает отображаемое значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#getDisplayValue\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) {\r\n if (this._data && this._data.isRendered === false) return this._data.displayValue;\r\n if (this.controls.length === 0) return;\r\n var jCustomControl = opt_jControl || this.controls[0].prev(\"span\");\r\n var jInput = this.controls[0];\r\n if (jInput.hasClass('rs_custom') && jInput.data('selected') == 'false') {\r\n return jInput.val();\r\n } else {\r\n var values = [];\r\n jCustomControl.parents('.rs_SelItems').children(\"span\").each(function () {\r\n values.push($(this).attr(\"data-text\"));\r\n });\r\n return values.join(';');\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает значения отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#setValue\r\n * @param value {string} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {boolean} Признак необходимости вызова события change\r\n\t * @param [opt_leadRequisiteValues] {boolean} Признак ведущего реквизита\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite} Текущий объект реквизита – BaseObjectSelectRequisite.\r\n * @since 5.5.0.1000\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues) {\r\n var me = this;\r\n opt_needTriggerResult = (opt_needTriggerResult !== false);\r\n\r\n if (me.controls.length === 0) return me._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\r\n\r\n $.each(me.controls, function () {\r\n WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite.setControlValue(this, value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues);\r\n });\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить значение в поле по его имени.\r\n *\r\n * @private\r\n * @function WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_getControlValue\r\n * @since 5.5.0.1000\r\n */\r\n _getControlValue: function (controlName) {\r\n var value;\r\n\r\n var jHidden = $('#hSelID_' + controlName);\r\n\r\n var jInput = this.controls[0];\r\n if (jInput.hasClass('rs_custom')) {\r\n if (jInput.data('selected') == 'false') {\r\n value = '$' + jInput.val();\r\n } else {\r\n value = jHidden.val();\r\n }\r\n } else {\r\n value = jHidden.val();\r\n }\r\n\r\n return (value && value !== '$') ? value : '';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Возвращает признак недоступности реквизита справочника для изменения.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#isDisabled\r\n\t * @comment почему функция, а не метод?\r\n * @return {Boolean} True – реквизит справочника доступен только для чтения, иначе False.\r\n * @since 5.5.0.1000\r\n */\r\n isDisabled: function () {\r\n var isDisabled = false;\r\n $(this.controls).each(function (index) {\r\n if ($(this).attr('readonly') === \"readonly\") isDisabled = true;\r\n });\r\n return isDisabled;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Отключение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_disableControl\r\n * @private\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite}\r\n * @since 5.5.0.1000\r\n */\r\n _disableControl: function (jControl) {\r\n onControlInitComplete(jControl, function () { jControl.SetDisabled() });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Включение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_enableControl\r\n * @private\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite}\r\n * @since 5.5.0.1000\r\n */\r\n _enableControl: function (jControl) {\r\n onControlInitComplete(jControl, function () { jControl.SetEnabled(); });\r\n return this;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация событий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_bindEvents\r\n * @since 5.5.0.1000\r\n * @return WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\r\n */\r\n _bindEvents: function () {\r\n var me = this;\r\n\r\n if (me.controls.length === 0) {\r\n var controlInit = $.Deferred();\r\n me._allControlsInit.push(controlInit);\r\n controlInit.resolve();\r\n return me;\r\n }\r\n\r\n $.each(me.controls, function () {\r\n me._bindControlEvents(this);\r\n });\r\n\r\n return me;\r\n },\r\n\r\n /**\r\n * Вызвать событие изменения для реквизитов типа Справочники и Документ.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_fireObjectSelectRequisiteChange \r\n * @param {object} jControl Контрол.\r\n * @param {object} event Событие, в рамках которого вызывает функция. \r\n * @param {object} setData Устанавливаемое значение.\r\n * @private\r\n */\r\n _fireObjectSelectRequisiteChange(jControl, event, setData) { \r\n this.touch();\r\n this.fire('change', jControl, event, setData);\r\n },\r\n\r\n\r\n _bindControlEvents: function (jControl) {\r\n var me = this;\r\n\r\n var controlInit = $.Deferred();\r\n me._allControlsInit.push(controlInit);\r\n\r\n onControlInitComplete(jControl, function () {\r\n\r\n var rs = jControl.data('ReferenceSelectInstance');\r\n var reqFullName = me.fullName;\r\n if (!!rs) {\r\n if (rs.multiselect) {\r\n jControl.resultMulti(function (ev, changedData, data) {\r\n var res = [];\r\n if (data) {\r\n if (!$.isArray(data)) {\r\n data = [data];\r\n };\r\n for (var i = 0; i < data.length; i++) {\r\n res.push({ name: reqFullName, value: data[i].groupcode + ':' + data[i].id, displayValue: data[i].name });\r\n }\r\n }\r\n me._fireObjectSelectRequisiteChange(jControl, ev, res);\r\n me._parent.fire('change', jControl, ev, res);\r\n return this;\r\n });\r\n } else {\r\n\r\n jControl.result(function (ev, data) {\r\n if (data == null) {\r\n data = [null, null, null, '{}'];\r\n }\r\n me._fireObjectSelectRequisiteChange(jControl, ev, { name: reqFullName, value: data[0], displayValue: data[2] });\r\n me.fire('changeWithLeaderValues', jControl, ev, { name: reqFullName, value: data[0], displayValue: data[2], leaderRequisiteValues: $.parseJSON(data[3]) }, true);\r\n // Обращаемся к форме через _parent, т.к. WA.CR.form может вернуть форму, к которой текущий реквизит не принадлежит\r\n // (например, для диалогов, открытых на странице записи справочника).\r\n me._parent.fire('change', jControl, ev, { name: reqFullName, value: data[0], displayValue: data[2] });\r\n });\r\n }\r\n if (!rs.allowlike) {\r\n jControl\r\n .on('change', function (ev) {\r\n var value = jControl.val();\r\n const requisiteData = {\r\n name: reqFullName,\r\n value: `$${value}`,\r\n displayValue: value,\r\n };\r\n me._fireObjectSelectRequisiteChange(jControl, ev, requisiteData);\r\n me._parent.fire('change', jControl, ev, requisiteData);\r\n })\r\n .on('changeOnSelectValue', function (ev, data) {\r\n if (data == null) {\r\n data = [null, null, null, '{}'];\r\n }\r\n var value = data[0];\r\n var displayValue = data[2];\r\n const requisiteData = {\r\n name: reqFullName,\r\n value: value,\r\n displayValue: displayValue,\r\n };\r\n me._fireObjectSelectRequisiteChange(jControl, ev, requisiteData);\r\n me._parent.fire('change', jControl, ev, requisiteData);\r\n });\r\n }\r\n }\r\n\r\n // Бывает случаи когда он изменяется без срабатывания событий выше, но изменения должны уходить на сервер. Например, при очистке ведущего, очищается ведомый.\r\n jControl.on('change', function (ev) {\r\n me.touch();\r\n });\r\n\r\n controlInit.resolve();\r\n });\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Возвращает признак возможности множественного выбора.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#isMultiselect\r\n * @return {boolean} True - если реквизит поддерживает множественный выбор, иначе - False.\r\n\t* @since 5.4.0.1013\r\n */\r\n isMultiselect: function () {\r\n return false;\r\n }\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * @static\r\n */\r\n BaseObjectSelectRequisite.setControlValue = function (jControl, value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues) {\r\n var id = jControl.attr('id');\r\n var jHidd = $(\"#hSelID_\" + id);\r\n if (jHidd.length > 0) {\r\n //jHidd.val(value); //Шамов А.: Нельзя устанавливать значение скрытой переменной, т.к. это не позволит выполнить событие result. Скрытую переменную означит метод SetValue у компоненты выбор из справочника.\r\n jControl.attr(\"title\", opt_displayValue);\r\n\r\n if (!$('html').hasClass('mobile')) {\r\n if (value) {\r\n // если множественный выбор, то значения\r\n // записываются в виде \"СПР:11111;СПР2:23233\"\r\n var values = ('' + value).split(\";\");\r\n var displayValues = ('' + opt_displayValue).split(\";\");\r\n onControlInitComplete(jControl, function () {\r\n jControl.Clear();\r\n for (var i = 0; i < values.length; i++) {\r\n var leadRequisiteValues = opt_leadRequisiteValues ? JSON.stringify(opt_leadRequisiteValues) : '{}';\r\n jControl.SetValue(['' + values[i], ('' + displayValues[i]).escapeHtml(), displayValues[i], leadRequisiteValues], opt_needTriggerResult);\r\n };\r\n });\r\n } else {\r\n onControlInitComplete(jControl, function () {\r\n jControl.SetValue(['', '', '', '{}'], opt_needTriggerResult);\r\n });\r\n }\r\n } else {\r\n jControl.val(opt_displayValue);\r\n }\r\n jControl.SetSelected(true);\r\n }\r\n };\r\n\r\n global.WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite = BaseObjectSelectRequisite;\r\n})(window);","\"use strict\";\n\n/**\n* Реквизит типа «Выбор из справочника» и «Множественный выбор».\n*\n* @class WebAccess.components.wrappers.form.requisites.Reference\n* @extends WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\n* @property {string} name Имя реквизита\n* @param {string} requisiteName Имя реквизита\n* @param {obbject} data Данные для инициализации реквизита\n* @since 5.0.0.7100\n*/\n(function (global) {\r\n\n var Reference = global.WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite.extend({\r\n className: \"Reference\",\n\n /**\n * Установить фильтрацию по реквизитам справочника.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#setFilter\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.0.0.7100\n */\n setFilter: function (filter, opt_refCode) {\r\n if (this.controls.length === 0) return;\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i];\n if (!opt_refCode) {\r\n jControl.data('filter', filter);\r\n } else {\r\n jControl.data('ReferenceSelectInstance').refcodes[opt_refCode]['Filter'] = filter;\r\n }\r\n };\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n\n /**\n * Получает выражение фильтрации реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#getFilter\n * @since 5.4.0.1013\n * @return {string} Выражение фильтрации.\n */\n getFilter: function (referenceCode) {\r\n if (this.controls.length === 0) return null;\n\n var filter = null;\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i];\n var refSelect = jControl.data('ReferenceSelectInstance');\n if (referenceCode && refSelect && refSelect.refcodes[referenceCode]) {\r\n filter = refSelect.refcodes[referenceCode]['Filter'];\r\n }\n return filter || jControl.data('filter');\r\n }\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Получить имена справочников для выборки.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#getReferences\n * @since 5.0.0.7200\n * @return {object} Имена справочников для выборки.\n */\n getReferences: function () {\r\n var jControl;\n if (this.controls.length === 0) return this;\n for (var i = 0; i < this.controls.length; i++) {\r\n jControl = this.controls[i];\n return jControl.data('ReferenceSelectInstance').refcodes;\r\n };\r\n },\n\n /**\n * Установить выборку из указанных справочников.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#setReferences\n * @param {object} references Информация о справочниках. Формат описания выборки:\n * {\"ОРГ\":{\"Caption\": \"организации\",...},\"РАБ\":{..}}}\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.0.0.7100\n */\n setReferences: function (references) {\r\n var jControl;\n if (this.controls.length === 0) return this;\n for (var i = 0; i < this.controls.length; i++) {\r\n jControl = this.controls[i];\n jControl.data('ReferenceSelectInstance').setReferences(references);\r\n };\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Добавить новый справочник к текущему списку справочников для выборки.\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#addReferences\n * @param {object} references Информация о справочниках. Формат описания выборки:\n * {\"ОРГ\":{\"Caption\": \"организации\",...},\"РАБ\":{..}}}\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.0.0.7100\n */\n addReferences: function (references) {\r\n if (this.controls.length === 0) return this;\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i];\n jControl.data('ReferenceSelectInstance').addReferences(references);\r\n };\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Установить значение отображаемых и неотображаемых реквизитов.\n * Формат записи метода: [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...].\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#setValues\n * @param {object} newValues Новые значения множественного выбора\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.0.0.7100\n */\n setValues: function (newValues, needTriggerResult) {\r\n var me = this;\n if (me.controls.length === 0) return me; //TODO Сделать установку скрытых полей множественного выбора.\n me._setControlsValues(newValues, needTriggerResult);\n\n me._updateNewValues(newValues).done(function (updatedNewValues) {\r\n me._setControlsValues(updatedNewValues, false);\r\n });\n\n me.touch();\n return me;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Установить значение контролов.\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#_setControlsValues\n * @private\n * @param {object} newValues Новые значения множественного выбора\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\n * @since 5.0.0.9107\n */\n _setControlsValues: function (newValues, needTriggerResult) {\r\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\n jControl.data('ReferenceSelectInstance').setValues(newValues, needTriggerResult);\r\n };\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Обновить значения устанавливаемых значений.\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#_updateNewValues\n * @param {object} newValues Обновляемые значения.\n * @return {Array} Обновленный список значений с заполненными свойствами наименования и справочника.\n * @since 5.5.0.9000\n */\n _updateNewValues: function (newValues) {\r\n var d = $.Deferred();\n\n if (newValues.length) {\r\n // Получить список новых значений, у которых не указаны отображаемые значения\n var withoutDisplayValues = newValues.filter(function (item) {\r\n return !item.name && item.id;\r\n });\n\n if (withoutDisplayValues.length) {\r\n var ids = [];\r\n withoutDisplayValues.forEach(function (item) {\r\n ids.push(item.id);\r\n });\r\n\r\n // Получим наименования записей справочника\r\n WA.SRV.reference.getReferenceRecordsNames(ids).done(function (res) {\r\n // Пройтись по всем записям справочника\r\n newValues.forEach(function (item) {\r\n if (!item.name && res[item.id]) {\r\n item.name = res[item.id].name;\r\n }\r\n });\r\n\r\n d.resolve(newValues);\r\n });\r\n } else {\r\n d.resolve(newValues);\r\n }\r\n } else {\r\n d.resolve(newValues);\r\n }\n\r\n\r\n return d.promise();\r\n },\n\n /**\n * Получает значения реквизита.\n * Формат результата метода: [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...].\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#getValues\n * @return {Array} Массив объектов значений реквизита – currentValues.\n * @since 5.4.0.1012\n */\n getValues: function () {\r\n if (this.controls.length === 0) return this; //TODO Сделать установку скрытых полей множественного выбора.\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i];\n return jControl.data('ReferenceSelectInstance').getValues();\r\n };\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Добавляет новые значения отображаемых и неотображаемых реквизитов к уже существующим.\n * Формат записи метода: [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...].\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#addValues\n * @param {object} newValues Новые значения множественного выбора\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.4.0.1012\n */\n addValues: function (newValues, needTriggerResult) {\r\n var me = this;\r\n var currentValues = me.getValues();\n me._addValues(currentValues, newValues, needTriggerResult);\n\n me._updateNewValues(newValues).done(function (updatedNewValues) {\r\n me._addValues(currentValues, updatedNewValues, false);\r\n });\n\n return me;\r\n },\n\n /**\n * Добавить новые значения к реквизиту.\n *\n * @function WebAccess.components.wrappers.form.requisites.Reference#_addValues\n * @private\n * @param {object} currentValues - значение реквизита, к которому добавляются новые.\n * @param {object} newValues Новые значения множественного выбора\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\n * @since 5.5.0.9107\n */\n _addValues: function (currentValues, newValues, needTriggerResult) {\r\n var me = this;\r\n var allValues = currentValues.concat(newValues.filter(function (newItem) {\r\n var unique = true;\n currentValues.forEach(function (currentItem) {\r\n if (currentItem.id == newItem.id) {\r\n unique = false;\n return false;\r\n }\r\n });\n return unique;\r\n }));\n me.setValues(allValues, needTriggerResult);\n return me;\r\n },\n\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Указать справочник, выбор из которого будет выполняться в первую очередь.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#setMainReference\n * @param {string} referenceName Справочник, выбор из которого будет выполняться в первую очередь\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Объект типа Reference.\n * @since 5.0.0.7200\n */\n setMainReference: function (referenceName) {\r\n if (this.controls.length === 0) return this;\n for (var i = 0; i < this.controls.length; i++) {\r\n var jControl = this.controls[i];\n jControl.data('ReferenceSelectInstance').mainReferenceCode = referenceName;\r\n };\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Очистить параметры выбора из справочников.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#clearReferences\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Объект типа Reference.\n * @since 5.0.0.7200\n */\n clearReferences: function () {\r\n this.setReferences({});\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Добавляет справочник для выборки, из которого доступны последние и избранные объекты.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#addLastObjectsPseudoReference\n * @param {LAST_REFERENCES} lastReferences Справочники, из которых будет выполняться выбор\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Объект типа Reference.\n * @since 5.0.0.7200\n */\n addLastObjectsPseudoReference: function (lastReferences) {\r\n var oldRefs = this.getReferences();\n\n var newRefs = $.extend({\r\n 'ROUTELASTOBJS': { 'Caption': L('ROUTE_LAST_OBJECTS_PSEUDO_REFERENCE_CAPTION'), 'NeedShowHint': true, 'DisableSpecialProcessing': false, 'Filter': lastReferences }\r\n }, oldRefs);\n\n this.setReferences(newRefs);\n return this;\r\n },\n\n /**\n * Удалить из списка выборки справочник, из которого доступны последние и избранные объекты.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#removeLastObjectsPseudoReference\n * @param {LAST_REFERENCES} LastReferences Справочники, из которых будет выполняться выбор\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Объект типа Reference.\n * @since 5.0.0.7200\n */\n removeLastObjectsPseudoReference: function () {\r\n var oldRefs = this.getReferences();\n delete oldRefs['ROUTELASTOBJS'];\n this.setReferences(oldRefs);\n return this;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Привязывает вызов справочника в модальном окне к клику на иконке в поле ввода.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#bindReferenceGridDialog\n * @since 5.4.0.1012\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference\n */\n bindReferenceGridDialog: function () {\r\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\r\n var jControl = me.controls[i];\n var jContainer = jControl.parents('.reference_requisite');\n var jReqIcon = jContainer.find('.Req_Icon');\n jReqIcon.unbind('click touchstart').bind('click touchstart', function (e) {\r\n e.stopPropagation();\n var referenceCode = '';\n // Получаем первый код справочника\n for (var value in me.getReferences()) {\r\n referenceCode = value;\n break;\r\n }\n var mode = me.isDisabled() ? REFERENCE_MODAL_MODE.VIEW :\n (me.isMultiselect() ? REFERENCE_MODAL_MODE.MULTI : REFERENCE_MODAL_MODE.SINGLE);\n WebAccess.components.dialogs.ReferenceGridDialog.createAndShow({\r\n referenceName: referenceCode,\n mode: mode,\n filterExpression: me.getFilter(referenceCode),\n filterQuery: jControl.val(),\n queryContext: me.queryContext(),\n leaderSelectedId: me.leaderSelectedId()\r\n }).selectionDone(function (result) {\r\n if (mode == REFERENCE_MODAL_MODE.MULTI) {\r\n var valuesToBeSet = result.map(function (entry) {\r\n return {\r\n groupcode: referenceCode,\n id: entry.id,\n name: entry.name\r\n }\r\n });\n me.addValues(valuesToBeSet);\r\n } else if (mode == REFERENCE_MODAL_MODE.SINGLE) {\r\n me.setValue(result[0].id, result[0].name, true, result[0].leaderRequisiteValues);\r\n }\r\n });\r\n });\r\n }\n return me;\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Возвращает признак возможности множественного выбора.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#isMultiselect\n * @since 5.4.0.1013\n * @return {boolean} True - если реквизит поддерживает множественный выбор, иначе - False.\n */\n isMultiselect: function () {\r\n if (this.controls.length === 0) return false;\n for (var i = 0; i < this.controls.length; i++) {\r\n return this.controls[i].data('ReferenceSelectInstance').multiselect;\r\n }\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n\n /**\n * Возвращает контекст выборки.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#queryContext\n * @since 5.5.0.1000\n * @return {dict} Контекст выборки.\n */\n queryContext: function () {\r\n if (this.controls.length === 0) return null;\n for (var i = 0; i < this.controls.length; i++) {\r\n return this.controls[i].data('ReferenceSelectInstance').queryContext;\r\n }\r\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n\n /**\n * Возвращает список ведущих реквизитов.\n *\n * @method WebAccess.components.wrappers.form.requisites.Reference#leaderSelectedId\n * @since 5.5.0.1000\n * @return {string} Список ведущих реквизитов.\n */\n leaderSelectedId: function () {\r\n if (this.controls.length === 0) return null;\n for (var i = 0; i < this.controls.length; i++) {\r\n return this.controls[i].data('ReferenceSelectInstance').extraParams.LeadSelID();\r\n }\r\n },\n\n /**\r\n * Установить значение отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Reference#setValue\r\n * @param value {string} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.5.0.9000\r\n */\n setValue: function (value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues) {\r\n var me = this;\r\n me._super(value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues);\r\n\r\n if (!opt_displayValue && !me.hasCalculation) {\r\n if (value) {\r\n var baseSetValue = me._super;\r\n\r\n var references = me.getReferences();\r\n var referenceName = Object.keys(references)[0];\r\n me._updateNewValues([{ groupcode: referenceName, id: value, name: '' }]).done(function (updatedNewValues) {\r\n baseSetValue.apply(me, [value, updatedNewValues[0].name, false, false]);\r\n });\r\n }\r\n }\r\n\r\n return me;\r\n }\r\n\n });\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n global.WA.CMP.wrappers.form.requisites.Reference = Reference;\r\n})(window);","\"use strict\";\r\n\r\n/**\r\n* Реквизит карточки типа «Ссылка на документ».\r\n*\r\n* @class WebAccess.components.wrappers.form.requisites.Document\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {object} data Данные для инициализации реквизита\r\n* @since 5.5.0.1000\r\n*/\r\n(function (global) {\r\n\r\n var Document = global.WA.CMP.wrappers.form.requisites.BaseObjectSelectRequisite.extend({\r\n className: \"Document\",\r\n\r\n /**\r\n * Возвращает признак возможности множественного выбора.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Document#isMultiselect\r\n * @return {boolean} True - реквизит поддерживает множественный выбор, иначе - False.\r\n\t* @since 5.4.0.1013\r\n */\r\n isMultiselect: function () {\r\n return false;\r\n },\r\n\r\n /**\r\n * Установить значение отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Document#setValue\r\n * @param value {string} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.Document} Текущий объект реквизита – Document.\r\n * @since 5.5.0.9000\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues) {\r\n var me = this;\r\n var baseSetValue = me._super;\r\n me._super(value, opt_displayValue, opt_needTriggerResult, opt_leadRequisiteValues);\r\n\r\n if (!opt_displayValue && !me.hasCalculation) {\r\n if (value) {\r\n WA.SRV.document.getNameById([value]).done(function (res) {\r\n baseSetValue.apply(me, [value, res, false, false]);\r\n }).fail(function (message) {\r\n baseSetValue.apply(me, [value, message, false, false]);\r\n });\r\n }\r\n }\r\n\r\n return me;\r\n }\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n global.WA.CMP.wrappers.form.requisites.Document = Document;\r\n})(window);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Строка» и «Многострочный текст».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites.Text\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {object} data Данные для инициализации реквизита\r\n* @since 5.0.0.7100\r\n*/\r\n(function (global) {\r\n\r\n var Text = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\r\n className: \"Text\",\r\n\r\n /** \r\n * Получить значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Text#getValue\r\n * @return {string} Строка, содержащая значение реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n getValue: function (opt_jControl) {\r\n if (this._data && this._data.isRendered === false) return this._data.value;\r\n\r\n var jControl = opt_jControl || this.controls[0];\r\n if (typeof jControl.data('autoNumeric') === 'object') {\r\n return jControl.autoNumeric('get');\r\n }\r\n return (!jControl.val()) ? null : jControl.val();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /** \r\n * Получить отображаемое значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Text#getDisplayValue\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) {\r\n return this.getValue(opt_jControl);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /** \r\n * Установить значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Text#setValue\r\n * @param value {string} Устанавливаемое значение реквизита\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.Text} Текущий объект реквизита – Text.\r\n * @since 5.0.0.7100\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) { \r\n opt_needTriggerResult = (opt_needTriggerResult !== false);\r\n const newValue = opt_displayValue || value;\r\n\r\n if (!this.controls.length) {\r\n return this._setInvisibleValues(newValue, opt_displayValue, opt_needTriggerResult);\r\n }\r\n\r\n for (const jControl of this.controls) {\r\n jControl.val(newValue);\r\n if (opt_needTriggerResult) {\r\n jControl.change();\r\n }\r\n if (!jControl.is('textarea')) {\r\n jControl.attr('title', newValue);\r\n }\r\n //Если на строковом реквизите есть пользовательский выбор, то значение в контроле отображается неполностью.\r\n const requisiteReferenceInstance = jControl.data('ReferenceSelectInstance');\r\n if (requisiteReferenceInstance && requisiteReferenceInstance.isCustomSelect) {\r\n requisiteReferenceInstance.changeInpWidthAndPadding();\r\n }\r\n }\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /** \r\n * Установить отображаемое значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Text#setDisplayValue\r\n * @param value {string} Устанавливаемое значение реквизита\r\n * @return {WebAccess.components.wrappers.form.requisites.Text} Текущий объект реквизита – Text.\r\n * @since 5.0.0.7100\r\n */\r\n setDisplayValue: function (value) {\r\n this.setValue(value);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Получить контролы реквизита\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindEvents\r\n * @since 5.0.0.7100\r\n * @private\r\n * @return {array} список jquery объектов\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n var jControl;\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i];\r\n jControl = $('input#' + id + ',textarea#' + id);\r\n if (jControl.length) {\r\n res.push(jControl);\r\n }\r\n };\r\n return res;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n });\r\n\r\n global.WA.CMP.wrappers.form.requisites.Text = Text;\r\n})(window);","\"use strict\";\n\n/**\n* Класс для реквизита типа «Дата».\n* \n* @class WebAccess.components.wrappers.form.requisites.Date\n* @extends WebAccess.components.wrappers.form.requisites.Text\n* @property {string} name Имя реквизита\n* @param {string} requisiteName Имя реквизита\n* @param {obbject} data Данные для инициализации реквизита\n* @since 5.0.0.7100\n*/\n(function (global) {\n /**\n * @inner\n */\n var onControlInitComplete = function (jControl, callback) {\n if (jControl.hasClass('inited')) {\n callback();\n } else {\n jControl.bind('Init', function () {\n callback();\n });\n }\n };\n\n var Date = global.WA.CMP.wrappers.form.requisites.Text.extend({\n className: \"Date\",\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * @private \n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindControlEvents\n * @since 5.0.0.7100\n */\n _bindControlEvents: function (jControl) {\n var me = this;\n var controlInit = $.Deferred();\n me._allControlsInit.push(controlInit);\n\n me._super(jControl);\n\n onControlInitComplete(jControl, function () {\n controlInit.resolve();\n });\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Отобразить спиннер внутри контрола реквизита\n * @method WebAccess.components.wrappers.form.requisites.Date#_showSpinner\n * @since 5.2.0.2014\n * @private\n * @return WebAccess.components.wrappers.form.requisites.Date\n */\n _showSpinner: function () {\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\n var jControl = me.controls[i];\n var jContainer = jControl.parent();\n jContainer.find('.Req_Icon').hide();\n jContainer.append('
    ');\n }\n return me;\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Скрыть спиннер\n * @method WebAccess.components.wrappers.form.requisites.Date#_hideSpinner\n * @since 5.2.0.2014\n * @private\n * @return WebAccess.components.wrappers.form.requisites.Date\n */\n _hideSpinner: function () {\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\n var jControl = me.controls[i];\n var jContainer = jControl.parent();\n jContainer.find('.Req_Icon').show();\n jContainer.find('.circle-spinner').remove();\n }\n return me;\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /** \n * Установить значение реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Date#setValue\n * @param value {string} Устанавливаемое значение реквизита\n * @param [opt_displayValue] {string} Отображаемое значение\n * @param [opt_needTriggerResult] {string} Вызов триггера события типа change\n * @return {WebAccess.components.wrappers.form.requisites.Date} Текущий объект реквизита – Date.\n * @since 5.0.0.7100\n */\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\n if (value) {\n if (typeof value !== \"object\") {\r\n if (('' + value).indexOf('T') !== -1) {\r\n value = new window.Date(value);\r\n } else {\r\n value = parseDateTime(value);\r\n }\r\n }\n value = (this.isShowTime()) ? formatDateTime(value) : formatDate(value);\r\n } else {\n value = '';\r\n }\n return this._super(value, opt_displayValue, opt_needTriggerResult);\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /** \n * Получить значение реквизита в виде JS-объекта типа «Дата».\n *\n * @method WebAccess.components.wrappers.form.requisites.Date#getDisplayValue\n * @return {WebAccess.components.wrappers.form.requisites.Date} Объект типа Date.\n * @since 5.0.0.7100\n */\n getDate: function () {\n var value = this.getValue();\n if (value) return parseDate(this.getValue());\n return null;\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n\n /**\n * Отключение контрола реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Date#_disableControl\n * @return {WebAccess.components.wrappers.form.requisites.Date}\n * @private \n * @since 5.0.0.7100\n */\n _disableControl: function (jControl) {\n this._super(jControl);\n var icon = jControl.siblings('.Req_Icon');\n if (icon.length) {\n icon.attr('readonly', 'readonly').addClass(\"Req_Icon_Disabled\");\n }\n return this;\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Включение контрола реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Date#_enableControl\n * @private \n * @return {WebAccess.components.wrappers.form.requisites.Date}\n * @since 5.0.0.7100\n */\n _enableControl: function (jControl) {\n this._super(jControl);\n var icon = jControl.siblings('.Req_Icon');\n if (icon.length) {\n icon.removeAttr('readonly').removeClass(\"Req_Icon_Disabled\");\n }\n return this;\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n /**\n * Показывается ли время в реквизите.\n *\n * @method WebAccess.components.wrappers.form.requisites.Date#isShowTime\n * @return {boolean} True – реквизит показывает время, иначе False.\n * @since 5.2.0.2006\n */\n isShowTime: function () {\n var me = this;\n if (me.controls.length > 0) {\n var jControl = me.controls[0];\n return '' + jControl.siblings('.datepickerinfo').attr('showtime') === 'true';\n } else {\n return (me._data && me._data.dateFormat === 'DateTime');\n }\n return false;\n }\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n });\n\n global.WA.CMP.wrappers.form.requisites.Date = Date;\n})(window);\n\n\n","\"use strict\";\n\n/**\n* Реквизит карточки типа «Признак».\n* \n* @class WebAccess.components.wrappers.form.requisites.Pick\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\n* @property {string} name Имя реквизита\n* @param {string} requisiteName Имя реквизита\n* @param {object} data Данные для инициализации реквизита\n*/\n(function (global) {\n\n var Pick = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\n className: \"Pick\",\n\n\n /**\n * Отобразить спиннер внутри контрола реквизита\n * @method WebAccess.components.wrappers.form.requisites.Pick#_showSpinner\n * @since 5.2.0.2014\n * @private\n * @return WebAccess.components.wrappers.form.requisites.Pick\n */\n _showSpinner: function () {\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\n var jControl = me.controls[i];\n var isCheckbox = me._isCheckBox(jControl);\n var jContainer = jControl.parent();\n jContainer.find('.Req_Icon').hide();\n jContainer.append('
    ');\n }\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * Скрыть спиннер\n * @method WebAccess.components.wrappers.form.requisites.Pick#_hideSpinner\n * @since 5.2.0.2014\n * @private\n * @return WebAccess.components.wrappers.form.requisites.Pick\n */\n _hideSpinner: function () {\n var me = this;\n for (var i = 0; i < me.controls.length; i++) {\n var jControl = me.controls[i];\n var jContainer = jControl.parent();\n jContainer.find('.Req_Icon').show();\n jContainer.find('.circle-spinner').remove();\n }\n return me;\n },\n //---------------------------------------------------------------------//\n\n _isCheckBox: function (jControl) {\n return jControl.length && !jControl.is('.pickField');\n },\n\n _getControls: function () {\n var me = this;\n var res = [];\n\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\n for (var i = 0; i < me.controlsIds.length; i++) {\n var id = me.controlsIds[i];\n var jControl = $('input#' + id + 'inp, input#' + id);\n if (jControl.length == 0) {\n jControl = $('#' + id + '_value');\n if (jControl.length == 0) {\n jControl = $('#' + id);\n }\n }\n res.push(jControl);\n };\n return res;\n },\n\n /**\n * Получить значение в поле по его имени.\n *\n * @since 5.0.0.7100\n * @method WebAccess.components.wrappers.form.requisites.Pick#_getControlValue\n * @private\n */\n _getControlValue: function (controlName) {\n var me = this;\n var jControl;\n jControl = $(\"input#\" + controlName.replace('inp', '').replace('_display', '') + '_value');\n if (jControl.length == 0) {\n jControl = $(\"select#\" + controlName.replace('inp', '').replace('_display', ''));\n if (!me._isCheckBox(jControl)) {\n jControl = $(\"input#hidd\" + controlName.replace('inp', ''));\n }\n }\n return (!jControl.val()) ? null : jControl.val();\n },\n //---------------------------------------------------------------------//\n\n /** \n * Получить отображаемое значение реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#getDisplayValue\n * @return {string} Строка, содержащая отображаемое значение реквизита.\n */\n getDisplayValue: function (opt_jControl) {\n if (this._data.isRendered === false) return this._data.displayValue;\n if (this.controls.length === 0) return;\n var jC = opt_jControl || this.controls[0];\n return jC.val();\n },\n //---------------------------------------------------------------------//\n\n _isEditable: function (jControl) {\n return jControl.hasClass('editable');\n },\n //---------------------------------------------------------------------//\n\n /** \n * Установить значение реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#setValue\n * @param value {string} Устанавливаемое значение реквизита\n * @param [opt_displayValue] {string} Отображаемое значение\n * @param [opt_needTriggerResult] {string} Вызов триггера события типа change\n * @return { WebAccess.components.wrappers.form.requisites.Pick} Текущий объект реквизита – Pick.\n * @since 5.0.0.7100\n */\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\n var me = this;\n if (_.isUndefined(value)) return this;\n opt_needTriggerResult = (opt_needTriggerResult !== false);\n\n if (me.controls.length === 0) return me._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\n\n var jControl;\n for (var i = 0; i < this.controls.length; i++) {\n jControl = this.controls[i];\n if (me._isCheckBox(jControl)) {\n jControl.val(value);\n\n var jDisplay = me._getCheckBoxControl(jControl);\n \n if ((typeof jControl.parents('span').data('requisite') !== 'undefined') && (value == jControl.parents('span').data('requisite').yes)) jDisplay.attr('checked', 'checked').prop('checked', true);\n else jDisplay.removeAttr('checked').prop('checked', false);\n me.touch();\n }\n };\n\n var setValue = function (control, value, opt_displayValue, opt_needTriggerResult) {\n var ddInstance = control.data('DropDownListInstance');\n if (ddInstance) {\n ddInstance.setValue(value, opt_displayValue, opt_needTriggerResult);\n };\n };\n\n _(me.controls).each(function (jControl) {\n if (!me._isCheckBox(jControl)) {\n if (jControl.data('DropDownListInstance')) {\n setValue(jControl, value, opt_displayValue, opt_needTriggerResult);\n } else {\n jControl.bind('Init', function () {\n setValue(jControl, value, opt_displayValue, opt_needTriggerResult);\n });\n }\n if (opt_displayValue) {\r\n jControl.attr(\"title\", opt_displayValue);\r\n } else {\r\n jControl.removeAttr('title');\r\n }\n me.touch();\n\n };\n });\n\n return this;\n },\n //---------------------------------------------------------------------//\n\n /**\n * При смене значения в одном контроле оно должно примениться ко всем.\n *\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindMirrors\n * @private\n * @since 5.0.0.7100\n */\n _bindMirrors: function () {\n var me = this;\n if (me.controls.length > 1) {\n me.bind('change', function (context, ev, data) {\n me.setValue(data.value, undefined, false);\n });\n }\n return this;\n },\n //---------------------------------------------------------------------//\n\n /**\n * Получить контрол для чек-бокса.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#_getCheckBoxControl\n * @return {object} - чек-бокс для текущего контрола.\n * @private \n * @since 5.5.0.1310\n */\n _getCheckBoxControl: function (jControl) {\n var cardFormControl = jControl.closest('span');\n return cardFormControl.find('input[type=checkbox]');\n },\n //---------------------------------------------------------------------//\n\n /**\n * Отключение контрола реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#_disableControl\n * @return { WebAccess.components.wrappers.form.requisites.Pick}\n * @private \n * @since 5.0.0.7100\n */\n _disableControl: function (jControl) {\n var me = this;\n jControl.addClass(\"Req_Disabled\").attr('tabindex', -1);\n jControl.next('.Req_Icon').addClass('PickReq_Icon_Disabled');\n if (me._isEditable(jControl)) {\n jControl.prop('readonly', true);\n }\n if (me._isCheckBox(jControl)) {\n var jDisplay = me._getCheckBoxControl(jControl);\n if (jDisplay.length > 0) {\n jDisplay.attr('disabled', true); \n }\n }\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * Включение контрола реквизита.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#_enableControl\n * @private\n * @return { WebAccess.components.wrappers.form.requisites.Pick}\n * @since 5.0.0.7100\n */\n _enableControl: function (jControl) {\n var me = this;\n jControl.removeClass(\"Req_Disabled\").removeAttr('tabindex');\n jControl.next('.Req_Icon').removeClass('PickReq_Icon_Disabled');\n if (me._isEditable(jControl)) {\n jControl.prop('readonly', false);\n }\n if (me._isCheckBox(jControl)) {\n var jDisplay = me._getCheckBoxControl(jControl);\n if (jDisplay.length > 0) {\n jDisplay.attr('disabled', false);\n }\n }\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * @private\n */\n _bindEvents: function () {\n var me = this;\n\n if (me.controls.length === 0) {\n var controlInit = $.Deferred();\n me._allControlsInit.push(controlInit);\n controlInit.resolve();\n return me;\n }\n\n _(me.controls).each(function (jControl) {\n var controlInit = $.Deferred();\n me._allControlsInit.push(controlInit);\n\n if (me._isCheckBox(jControl)) {\n jControl = me._getCheckBoxControl(jControl);\n me._bindControlEvents(jControl, true);\n controlInit.resolve();\n return;\n };\n\n if (jControl.data('DropDownListInstance')) {\n me._bindControlEvents(jControl);\n controlInit.resolve();\n } else {\n jControl.bind('Init', function () {\n me._bindControlEvents(jControl);\n controlInit.resolve();\n });\n }\n });\n\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * @private \n * @method WebAccess.components.wrappers.form.requisites.Pick#_bindControlEvents\n * @since 5.0.0.7100\n */\n _bindControlEvents: function (jControl, isCheckBox) {\n var me = this;\n var reqFullName = me.fullName;\n var eventName = 'change.BaseRequisite';\n if (isCheckBox && (WA.ENV.browser.name === 'IE')) {\n eventName = 'click.BaseRequisite';\n }\n\n jControl.off(eventName).on(eventName, function (ev) {\n var value = me.getValue($(this));\n var displayValue = me.getDisplayValue($(this));\n me._fireChange(reqFullName, value, displayValue, ev);\n });\n },\n //---------------------------------------------------------------------//\n\n /**\n * @private\n */\n _applyControlMethod: function (jControl, method, args) {\n var me = this;\n var instance = jControl.data('DropDownListInstance');\n if (instance) {\n instance[method].apply(instance, args);\n } else {\n jControl.bind('Init', function () {\n instance = jControl.data('DropDownListInstance');\n instance[method].apply(instance, args);\n });\n }\n },\n //---------------------------------------------------------------------//\n\n /**\n * Очистка списка доступных для выбора значений.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#clearValues\n * @return { WebAccess.components.wrappers.form.requisites.Pick}\n * @since 5.2.0.2014\n */\n clearValues: function () {\n var me = this;\n _(me.controls).each(function (jControl) {\n if (me._isCheckBox(jControl)) {\n jControl.parents('span').data('requisite', {});\n } else {\n me._applyControlMethod(jControl, 'clearDropDownListItems');\n }\n });\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * Добавление нового значения в список доступных для выбора.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#addValue\n * @param {string} value значение (например \"Y\", \"Д\", \"Н\")\n * @param {string} displayValue отображаемое значение (например \"Да\")\n * @param {boolean} [opt_isDisabled] значение недоступно для выбора\n * @return { WebAccess.components.wrappers.form.requisites.Pick}\n * @since 5.2.0.2014\n */\n addValue: function (value, displayValue, opt_isDisabled) {\n var me = this;\n var item = [value, displayValue, displayValue.escapeHtml(), opt_isDisabled];\n _(me.controls).each(function (jControl) {\n if (me._isCheckBox(jControl)) {\n if (!jControl.parents('span').data('requisite')['yes']) {\n jControl.parents('span').data('requisite')['yes'] = value;\n } else {\n jControl.parents('span').data('requisite')['no'] = value;\n }\n } else {\n me._applyControlMethod(jControl, 'addDropDownListItem', [item]);\n }\n });\n return me;\n },\n //---------------------------------------------------------------------//\n\n /**\n * Удаление значения из списка доступных для выбора.\n *\n * @method WebAccess.components.wrappers.form.requisites.Pick#removeValue\n * @param {string} value значение (например \"Y\", \"Д\", \"Н\")\n * @return { WebAccess.components.wrappers.form.requisites.Pick}\n * @since 5.2.0.2014\n */\n removeValue: function (value) {\n _(me.controls).each(function (jControl) {\n me._applyControlMethod(jControl, 'removeDropDownListItem', [value]);\n });\n return me;\n }\n //---------------------------------------------------------------------//\n });\n\n global.WA.CMP.wrappers.form.requisites.Pick = Pick;\n})(window);\n\n\n","\"use strict\";\n\n/**\n* Класс для числовых реквизитов.\n* \n* @class WebAccess.components.wrappers.form.requisites.Integer\n* @extends WebAccess.components.wrappers.form.requisites.Text\n* @property {string} name Имя реквизита\n* @param {string} requisiteName Имя реквизита\n* @param {object} data Данные для инициализации реквизита\n* @since 5.0.0.7100\n*/\n(function (global) {\n\n /**\n * @inner\n */\n var onControlInitComplete = function (jControl, callback) {\n if (jControl.hasClass('inited')) {\n callback();\n } else {\n jControl.bind('Init', function () {\n callback();\n });\n }\n };\n\n var Integer = global.WA.CMP.wrappers.form.requisites.Text.extend({\n className: \"Integer\",\n\n /**\n * @private \n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_bindControlEvents\n * @since 5.0.0.7100\n */\n _bindControlEvents: function (jControl) {\n var me = this;\n var controlInit = $.Deferred();\n me._allControlsInit.push(controlInit);\n\n me._super(jControl);\n\n onControlInitComplete(jControl, function () {\n controlInit.resolve();\n });\n },\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\n getValue: function (opt_jControl) {\n if (this._data && this._data.isRendered === false) return this._data.value;\n var jControl = opt_jControl || this.controls[0];\n var jControlValue = jControl.val();\n if (typeof jControl.data('autoNumeric') === 'object' && jControlValue !== '*') {\r\n return jControl.autoNumeric('get');\r\n }\n return (!jControlValue) ? null : jControlValue;\n },\n\n setValue: function (value, opt_displayValue, opt_needTriggerResult) { \n var me = this;\n if (_.isUndefined(value)) return this;\n opt_needTriggerResult = (opt_needTriggerResult !== false); //если не передан, то по умолчанию будет true.\n\n if (this.controls.length === 0) return this._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\n \n value = (value+\"\").replace(',', '.');\n \n var val = parseFloat(value);\n\n var jControl;\n for (var i = 0; i < this.controls.length; i++) {\n jControl = this.controls[i];\n\n if (value === '*') {\n jControl.val('*');\n } else {\n if ((value === '' || _.isNull(value) || isNaN(val))) {\n jControl.val('');\n jControl.removeAttr(\"title\");\n continue;\n }\n\n if (typeof jControl.data('autoNumeric') === 'object') {\n jControl.autoNumeric('set', val);\n } else {\n jControl.val(val);\n }\n }\n\n if (opt_displayValue) {\r\n jControl.attr(\"title\", opt_displayValue);\r\n } else {\r\n jControl.removeAttr('title');\r\n }\n if (opt_needTriggerResult) { jControl.change(); }\n };\n\n this.touch();\n return this;\n }\n\n });\n\n global.WA.CMP.wrappers.form.requisites.Integer = Integer;\n})(window);\n\n\n","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Выбор из справочника» и «Множественный выбор».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites.Radio\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {obbject} data Данные для инициализации реквизита\r\n* @since 5.2.0.2014\r\n*/\r\n(function (global) {\r\n\r\n /**\r\n* @inner\r\n* @since 5.2.0.2014\r\n*/\r\n\r\n var Radio = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\r\n className: \"Radio\",\r\n\r\n /**\r\n * Получить контролы реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#_bindEvents\r\n * @private\r\n * @return {array} список jquery объектов\r\n * @since 5.2.0.2014\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i]; \r\n var selector = '[name=\"' + id + '\"][type=\"radio\"]';\r\n selector = selector.replaceAll('_', '$');\r\n var jControl = $(selector);\r\n res.push(jControl);\r\n }\r\n return res;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Отобразить спиннер внутри контрола реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#_showSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.Radio\r\n */\r\n _showSpinner: function () {\r\n var me = this; \r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Скрыть спиннер\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#_hideSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.Radio\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /** \r\n * Получить значение реквизита.\r\n * \r\n * @method WebAccess.components.wrappers.form.requisites.Radio#getDisplayValue\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) {\r\n if (this._data && this._data.isRendered === false) return this._data.displayValue;\r\n if (this.controls.length === 0) return;\r\n return $(this.controls[0]).filter(':checked').next('label').text();\r\n\r\n },\r\n //---------------------------------------------------------------------// \r\n\r\n /** \r\n * Установить значение отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#setValue\r\n * @param value {string} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.Radio} Текущий объект реквизита – Reference.\r\n * @since 5.2.0.2014\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n opt_needTriggerResult = (opt_needTriggerResult !== false);\r\n\r\n if (this.controls.length === 0) return this._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\r\n\r\n $.each(me.controls, function () {\r\n var jControl = $(this).filter(function () {\r\n return $(this).val().toLowerCase() === value.toString().toLowerCase();\r\n })\r\n jControl.prop('checked', true);\r\n //if (opt_displayValue) jControl.next('label').text(opt_displayValue);\r\n });\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#setDisplayValue\r\n */\r\n setDisplayValue: function (displayValue, opt_needTriggerResult) {\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить значение в поле по его имени.\r\n *\r\n * @private\r\n * @function WebAccess.components.wrappers.form.requisites.Radio#_getControlValue\r\n * @since 5.2.0.2014\r\n */\r\n _getControlValue: function (controlName) {\r\n if (this.controls.length === 0) return;\r\n return $(this.controls[0]).filter(':checked').val() === 'True'; \r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * @method WebAccess.components.wrappers.form.requisites.Radio#setCustomAction\r\n * @ignore \r\n */\r\n setCustomAction: function() {\r\n return this;\r\n }\r\n });\r\n\r\n global.WA.CMP.wrappers.form.requisites.Radio = Radio;\r\n})(window);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Выбор из справочника» и «Множественный выбор».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites.CheckBox\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {obbject} data Данные для инициализации реквизита\r\n* @since 5.0.0.7100\r\n*/\r\n(function (global) {\r\n\r\n /**\r\n* @inner\r\n* @since 5.2.0.2014\r\n*/\r\n\r\n var CheckBox = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\r\n className: \"CheckBox\",\r\n\r\n /**\r\n * Получить контролы реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#_bindEvents\r\n * @private\r\n * @return {array} список jquery объектов\r\n * @since 5.0.0.7100\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i]; \r\n var selector = '[id=\"' + id + '\"]';\r\n var jControl = $(selector);\r\n res.push(jControl);\r\n }\r\n return res;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Отобразить спиннер внутри контрола реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#_showSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.CheckBox\r\n */\r\n _showSpinner: function () {\r\n var me = this; \r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Скрыть спиннер\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#_hideSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.CheckBox\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n return me;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /** \r\n * Получить значение реквизита.\r\n * \r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#getDisplayValue\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) { \r\n return '';\r\n },\r\n //---------------------------------------------------------------------// \r\n\r\n /** \r\n * Установить значение отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#setValue\r\n * @param value {string} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.CheckBox} Текущий объект реквизита – Reference.\r\n * @since 5.0.0.7100\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n opt_needTriggerResult = (opt_needTriggerResult !== false);\r\n\r\n if (this.controls.length === 0) return this._setInvisibleValues(value, opt_displayValue, opt_needTriggerResult);\r\n\r\n $.each(me.controls, function () {\r\n $(this).prop('checked', value);\r\n });\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * @ignore\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#setDisplayValue\r\n */\r\n setDisplayValue: function (displayValue, opt_needTriggerResult) {\r\n var me = this; \r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить значение в поле по его имени.\r\n *\r\n * @private\r\n * @function WebAccess.components.wrappers.form.requisites.CheckBox#_getControlValue\r\n * @since 5.0.0.7100\r\n */\r\n _getControlValue: function (controlName) {\r\n if (this.controls.length === 0) return;\r\n return $(this.controls[0]).is(':checked'); \r\n },\r\n //---------------------------------------------------------------------// \r\n\r\n /**\r\n * Установить подпись для реквизита.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseRequisite#setLabel\r\n * @ignore\r\n * @return {WebAccess.components.wrappers.BaseRequisite} Текущий объект реквизита.\r\n */\r\n setLabel: function (text) {\r\n return this;\r\n },\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Получить контрол подписи.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_getLabelForControl\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {object}\r\n */\r\n _getLabelForControl: function (jControl) {\r\n var jC = jControl.parents('.Card_Element:first').prev('.CardForm_Label');\r\n if (jC.length) return jC;\r\n jC = jControl.parents('label');\r\n return jC;\r\n },\r\n //---------------------------------------------------------------------//\r\n \r\n /**\r\n * @method WebAccess.components.wrappers.form.requisites.CheckBox#setCustomAction\r\n * @ignore \r\n */\r\n setCustomAction: function() {\r\n return this;\r\n }\r\n //---------------------------------------------------------------------//\r\n\r\n });\r\n\r\n global.WA.CMP.wrappers.form.requisites.CheckBox = CheckBox;\r\n})(window);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа \"Список обьектов\".\r\n*\r\n* @class WebAccess.components.wrappers.form.requisites.ObjectList\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @property {string} name Имя реквизита\r\n* @param {string} requisiteName Имя реквизита\r\n* @param {obbject} data Данные для инициализации реквизита\r\n* @since 5.2.0.2014\r\n*/\r\n(function (global) {\r\n\r\n\r\n\r\n var ObjectList = global.WA.CMP.wrappers.form.requisites.BaseRequisite.extend({\r\n className: \"ObjectList\",\r\n\r\n /**\r\n * Получить контролы реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_bindEvents\r\n * @private\r\n * @return {array} список jquery объектов\r\n * @since 5.2.0.2014\r\n */\r\n _getControls: function () {\r\n var me = this;\r\n var res = [];\r\n\r\n if (me.controlsIds.length == 0 || me.controlsIds[0] == \"\") return [];\r\n\r\n for (var i = 0; i < me.controlsIds.length; i++) {\r\n var id = me.controlsIds[i];\r\n var jControl = $('#' + id + '_list');\r\n res.push(jControl);\r\n }\r\n return res;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Вызвать событие изменения\r\n * @private\r\n */\r\n _fireChange: function (reqFullName, value, displayValue, opt_ev) {\r\n var me = this;\r\n me.touch();\r\n me.fire(\"change\", this, opt_ev, { name: reqFullName, value: me.getValue(), displayValue: null });\r\n if (this._parent && this._parent.form) this._parent.form.fire(\"change\", this, opt_ev, { name: reqFullName, value: me.getValue(), displayValue: displayValue });\r\n },\r\n\r\n\r\n /**\r\n * Отобразить спиннер внутри контрола реквизита\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_showSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.ObjectList\r\n */\r\n _showSpinner: function () {\r\n var me = this;\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть спиннер\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_hideSpinner\r\n * @since 5.2.0.2014\r\n * @private\r\n * @return WebAccess.components.wrappers.form.requisites.ObjectList\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить значение реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#getDisplayValue\r\n * @ignore\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n */\r\n getDisplayValue: function (opt_jControl) {\r\n return;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить выбранные ссылки.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#getDisplayValue\r\n * @ignore\r\n * @return {string} Строка, содержащая отображаемое значение реквизита.\r\n * @since 5.2.0.2014\r\n */\r\n getSelectedValue: function( ) {\r\n return this._getControlValue(this.controlsIds[0], 'GetSelectedLinks')\r\n },\r\n\r\n /**\r\n * Установить значение отображаемых и неотображаемых реквизитов.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#setValue\r\n * @param value {WebAccess.Link|WebAccess.Link[]} Устанавливаемое значение\r\n * @param [opt_displayValue] {string} Отображаемое значение\r\n * @param [opt_needTriggerResult] {string} Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.ObjectList} Текущий объект реквизита – ObjectList.\r\n * @since 5.2.0.2014\r\n */\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n if (_.isUndefined(value)) return;\r\n opt_needTriggerResult = (opt_needTriggerResult !== false);\r\n\r\n if (!_.isArray(value)) value = [value];\r\n _.each(me.controlsIds, function (name) {\r\n var list = ListRequisite(name);\r\n var links = _(value).map(function (link) {\r\n return link.toLinkModel();\r\n });\r\n list.Values = links;\r\n list.UpdateList();\r\n });\r\n\r\n this.touch();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить контрол подписи.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#_getLabelForControl\r\n * @private\r\n * @since 5.0.0.7100\r\n * @return {object}\r\n */\r\n _getLabelForControl: function (jControl) {\r\n var jC = jControl.parents('.Card_Element:first').prev('.CardForm_Label');\r\n if (jC.length) return jC;\r\n return jControl.parents('tr').eq(1).find('td.wizard-table__cell_type_label');\r\n },\r\n\r\n /**\r\n * Получить значение в поле по его имени.\r\n *\r\n * @private\r\n * @function WebAccess.components.wrappers.form.requisites.ObjectList#_getControlValue\r\n * @since 5.2.0.2014\r\n * @return {Array}\r\n */\r\n _getControlValue: function (controlName, method) {\r\n method = method || 'GetLinks';\r\n\r\n var value;\r\n var result = ListRequisite(controlName)[method]();\r\n\r\n if (result.links) {\r\n return _(result.links).map(function (link) {\r\n var newLink = new WA.Link({});\r\n return newLink.fromLinkModel(link);\r\n });\r\n } else {\r\n return null;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак недоступности реквизита справочника для изменения.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.ObjectList#isDisabled\r\n * @return {Boolean} True – реквизит справочника доступен только для чтения, иначе False.\r\n * @since 5.2.0.2014\r\n */\r\n isDisabled: function () {\r\n return ListRequisite(this.controlsIds[0]).ReadOnly;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отключение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_disableControl\r\n * @private\r\n * @return {WebAccess.components.wrappers.form.requisites.ObjectList}\r\n * @since 5.2.0.2014\r\n */\r\n _disableControl: function (jControl) {\r\n _.each(this.controlsIds, function (name) {\r\n ListRequisite(name).Disable();\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включение контрола реквизита.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_enableControl\r\n * @private\r\n * @return {WebAccess.components.wrappers.form.requisites.ObjectList}\r\n * @since 5.2.0.2014\r\n */\r\n _enableControl: function (jControl) {\r\n _.each(this.controlsIds, function (name) {\r\n ListRequisite(name).Enable();\r\n });\r\n return this;\r\n },\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация событий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.form.requisites.ObjectList#_bindEvents\r\n * @since 5.2.0.2014\r\n * @return WebAccess.components.wrappers.form.requisites.ObjectList\r\n */\r\n _bindEvents: function () {\r\n var me = this;\r\n if (me.controls.length === 0) return this;\r\n $.each(me.controls, function () {\r\n me._bindControlEvents($(this).parents('.ListRequisite'));\r\n });\r\n return me;\r\n }\r\n\r\n });\r\n\r\n global.WA.CMP.wrappers.form.requisites.ObjectList = ObjectList;\r\n})(window);\r\n","\"use strict\";\r\n(function (global) {\r\n\r\n /**\r\n * Для детальных раздела доступно два режима работы, это когда курсор находится\r\n * на реквизите и существует непосредственно контрол реквизита и когда данными необходимо\r\n * оперировать напрямую меняя грид.\r\n * Этот миксин дополняет реквизиты детальных разделов таким образом, что конечная \r\n * работа с реквизитом становится прозрачной и одинаково рабочей независимо от того,\r\n * есть ли сейчас контрол для реквизита или его нет.\r\n * Логика не вынесена в класс _details.BaseRequisite потому, что тогда для каждого\r\n * реквизита пришлось бы снова имплементировать существующие методы.\r\n * @mixin WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n * @propery {boolean} isEditMode признак наличия активного редактора\r\n * @private\r\n */\r\n\r\n var editModeMixin = {\r\n isEditMode: false,\r\n\r\n _grid: null,\r\n _filter: null,\r\n _filters: null,\r\n _isVisible: true,\r\n _pickValues: null,\r\n _references: null,\r\n _customAction: null,\r\n _mainReference: null,\r\n _lastReferences: null,\r\n _lastValue: null,\r\n _addLastObjectsPseudoReference: null,\r\n _bindReferenceGridDialog: null,\r\n _isChangeFired: false,\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n init: function (requisiteName, data, opt_parent, opt_grid) {\r\n\r\n var me = this;\r\n me._lastValue = {};\r\n me._super(requisiteName, data, opt_parent);\r\n me._isDisabled = data.isReadOnly;\r\n\r\n me._filters = {};\r\n me._references = {};\r\n me._pickValues = [];\r\n\r\n if (data.requisite) {\r\n me._references = data.requisite.refcodes;\r\n };\r\n\r\n me._grid = opt_grid; //Core.grid.details[me._parent._parentTable.name];\r\n me._bindGridEvents();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * В момент когда редактор активирован, необходимо перестроить jquery объекты на новые контролы;\r\n * @mixin WebAccess.components.wrappers.form.requisites._details.editModeMixin#_reInitControls\r\n * @return {WebAccess.components.wrappers.form.requisites._details.editModeMixin}\r\n */\r\n _reInitControls: function (editor) {\r\n this.controls = this._getControls(editor);\r\n this._bindEvents();\r\n this._isChangeFired = false; \r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /** \r\n * @see WebAccess.components.wrappers.form.requisites.BaseRequisite#_fireChange \r\n * @private\r\n */\r\n _fireChange(reqFullName, value, displayValue, opt_ev) { \r\n this._isChangeFired = true;\r\n this.touch();\r\n const requisiteData = {\r\n displayValue: displayValue,\r\n name: reqFullName, \r\n value: value, \r\n }\r\n this.fire('change', this, opt_ev, requisiteData);\r\n },\r\n\r\n /** \r\n * @see WebAccess.components.wrappers.form.requisites.BaseObjectSelectRequisite#_fireObjectSelectRequisiteChange \r\n * @private\r\n */\r\n _fireObjectSelectRequisiteChange(jControl, event, requisiteData) {\r\n this._isChangeFired = true;\r\n this.touch();\r\n this.fire('change', jControl, event, requisiteData);\r\n },\r\n \r\n /**\r\n * \r\n * @mixin WebAccess.components.wrappers.form.requisites._details.editModeMixin#_reInitControls\r\n * @return {WebAccess.components.wrappers.form.requisites._details.editModeMixin}\r\n */\r\n _bindGridEvents: function () { \r\n var me = this;\r\n me._lastValue[me.name] = me.getValue();\r\n\r\n this._grid.bind('requisiteChange', (requisiteName, rowId, value, displayValue) => {\r\n // _isChangeFired устанавливается в True в _fireChange, в случае если изменение связанного с реквизитом контрола произошло раньше.\r\n if (!this._isChangeFired) {\r\n if (requisiteName === this.name && rowId === this._data.row_id) {\r\n let last = this._lastValue[this.name] || '';\r\n let current = value || '';\r\n\r\n if (last !== current) { \r\n this._lastValue[this.name] = value; \r\n this._fireChange(requisiteName, value, displayValue);\r\n }\r\n }\r\n } \r\n });\r\n\r\n this._grid.bind('editorInit', function (requisiteName, rowId, value, displayValue, editor) {\r\n if (requisiteName === me.name && rowId == me._data.row_id) {\r\n me.isEditMode = true;\r\n\r\n if (me.isDisabled()) {\r\n editor.disable();\r\n } else {\r\n editor.enable();\r\n }\r\n\r\n if (me._filter) editor.setFilter(me._filter);\r\n if (!_.isEmpty(me._filters)) {\r\n for (var refName in me._filters) {\r\n editor.setFilters(me._filters[refName], refName);\r\n }\r\n }\r\n\r\n if (me._clearPick) {\r\n editor.clearValues();\r\n }\r\n\r\n if (!_.isEmpty(me._pickValues)) {\r\n _.each(me._pickValues, function (v) {\r\n editor.addValue(v[0], v[1], v[2]);\r\n });\r\n }\r\n\r\n if (!_.isEmpty(me._references)) {\r\n if (editor.setReferences) editor.setReferences(me._references);\r\n };\r\n\r\n if (me._mainReference) {\r\n if (editor.setReferences) editor.setMainReference(me._mainReference);\r\n };\r\n\r\n if (me._addLastObjectsPseudoReference) {\r\n editor.addLastObjectsPseudoReference(me._lastReferences);\r\n };\r\n\r\n if (me._bindReferenceGridDialog) {\r\n editor.bindReferenceGridDialog();\r\n }\r\n\r\n if (!_.isEmpty(me._customAction)) {\r\n editor.setCustomAction(me._customAction.callback, me._customAction.tooltip);\r\n };\r\n\r\n me._reInitControls(editor);\r\n\r\n me.fire('editModeChange', true); \r\n }\r\n });\r\n\r\n this._grid.bind('editorDestroy', function () {\r\n // Оптимизация, что бы не срабатывало много editModeChange при кадом чихе.\r\n if (me.isEditMode) {\r\n me.isEditMode = false;\r\n me.fire('editModeChange', false); \r\n }\r\n });\r\n\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n _getControls: function (editor) {\r\n var me = this;\r\n if (editor) {\r\n var res = [];\r\n me.controlsIds = [];\r\n me.controlsIds.push(editor.id);\r\n res.push($('input#' + editor.id))\r\n this.controls = res;\r\n return res;\r\n } else {\r\n return this.controls;\r\n }\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n getValue: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n return me._super();\r\n }\r\n var row = me._grid.dataView.getItemById(me._data.row_id);\r\n return row[me.name];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n getDisplayValue: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n return me._super();\r\n }\r\n var row = me._grid.dataView.getItemById(me._data.row_id);\r\n return row[me._data.fieldName];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n setValue: function (value, opt_displayValue, opt_needTriggerResult) {\r\n var me = this;\r\n\r\n if (opt_displayValue && opt_displayValue[0] === '$') opt_displayValue = opt_displayValue.replace('$');\r\n opt_needTriggerResult = (opt_needTriggerResult !== false); //если не передан, то по умолчанию будет true.\r\n\r\n var editorActive = me._grid.grid.getEditorLock().isActive();\r\n\r\n if (me.isEditMode) {\r\n return me._super(value, opt_displayValue, opt_needTriggerResult);\r\n } else if (me.className == 'DetailDate') {\r\n if (value) {\r\n if (typeof value !== \"object\") {\r\n if (('' + value).indexOf('T') !== -1) {\r\n value = new window.Date(value);\r\n } else {\r\n value = parseDateTime(value);\r\n }\r\n }\r\n // Форматируем дату\r\n value = (this.isShowTime()) ? formatDateTime(value) : formatDate(value);\r\n } else {\r\n value = '';\r\n }\r\n }\r\n\r\n var row = me._grid.dataView.getItemById(me._data.row_id);\r\n row[me.name] = value;\r\n\r\n // тут нельзя проверять просто приводя к булеву, \r\n // потому что 0 - тоже значение.\r\n if (!_.isUndefined(opt_displayValue)) {\r\n if (me.className == 'DetailInteger' && currentCultureName === 'ru-RU' && !_.isNull(opt_displayValue)) { //FIXME: Спецобработка\r\n opt_displayValue = (\"\" + opt_displayValue).replace('.', ',');\r\n }\r\n\r\n row[me._data.fieldName] = opt_displayValue;\r\n } else {\r\n row[me._data.fieldName] = value;\r\n }\r\n\r\n me._grid.dataView.updateItem(me._data.row_id, row);\r\n if (opt_needTriggerResult) {\r\n me._lastValue[me.name] = value;\r\n me._fireChange(me.fullName, value, opt_displayValue);\r\n }\r\n\r\n if (editorActive) me._grid.grid.editActiveCell();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сделать реквизит недоступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#disable\r\n * @since 5.0.0.7100\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Текущий объект реквизита.\r\n */\r\n disable: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n me._super();\r\n }\r\n me._isDisabled = true;\n //Показываем визуально что реквизит в ячейке только для чтения\n const cellStyle = {\r\n [this.name]: 'readonly'\r\n };\n const rowNum = this._grid.dataView.getIdxById(this._data.row_id); \r\n this._grid.grid.setCellCssStyles(`${rowNum}${this.name}`, {\r\n [rowNum]: cellStyle,\r\n });\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сделать реквизит доступным для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#enable\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Текущий объект реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n enable: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n me._super();\r\n }\r\n me._isDisabled = false;\n const rowNum = this._grid.dataView.getIdxById(this._data.row_id);\r\n const cellStyle = {\r\n [this.name]: ''\r\n };\r\n this._grid.grid.setCellCssStyles(`${rowNum}${this.name}`, {\r\n [rowNum]: cellStyle,\r\n });\n\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрыть реквизит и его подпись.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#hide\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Текущий объект реквизита.\r\n * @since 5.0.0.7100\r\n */\r\n hide: function () {\r\n log.warning('REQUISITE', 'This method was changed since version 5.2.0.1300 and may work improperly.');\r\n var me = this;\r\n me._isVisible = false;\r\n var cellStyle = {};\r\n var rownNum = me._grid.dataView.getIdxById(me._data.row_id);\r\n cellStyle[rownNum] = {};\r\n cellStyle[rownNum][me.name] = \"hidden_cell\";\r\n\r\n me._grid.grid.setCellCssStyles(rownNum + me.name, cellStyle);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Отобразить реквизит.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#show\r\n * @return {WebAccess.components.wrappers.form.requisites.BaseRequisite} Текущий объект реквизита.\r\n * @since 5.2.0.1300\r\n */\r\n show: function () {\r\n log.warning('REQUISITE', 'This method was changed since version 5.2.0.1300 and may work improperly.');\r\n var me = this;\r\n me._isVisible = true;\r\n var cellStyle = {};\r\n var rownNum = me._grid.dataView.getIdxById(me._data.row_id);\r\n cellStyle[rownNum] = {};\r\n cellStyle[rownNum][me.name] = \"\";\r\n me._grid.grid.setCellCssStyles(rownNum + me.name, cellStyle);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Признак видимости реквизита на форме.\r\n *\r\n * @since 5.0.0.7100\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isVisible\r\n * @return {boolean} True – реквизит отображается на форме, иначе False.\r\n */\r\n isVisible: function () {\r\n log.warning('REQUISITE', 'This method was changed since version 5.2.0.1300 and may work improperly.');\r\n return this._isVisible;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак недоступности реквизита для изменения.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isDisabled\r\n * @return {boolean} True – реквизит недоступен для изменения, иначе False. \r\n * @since 5.2.0.1300\r\n */\r\n isDisabled: function () {\r\n var me = this;\r\n var isDisabled = false;\r\n return this._isDisabled;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить иконку к элементу управления реквизита, за исключением реквизитов типа «Справочник» и «Множественный выбор». \r\n * Метод прикрепляет к тестовому полю действие для события, например, нажатие на иконку. \r\n * При наступлении этого события в код передаются данные о текущем реквизите.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites.BaseRequisite#setCustomAction\r\n * @param {string} reqName Имя реквизита\r\n * @param {string} tooltip Подсказка к реквизиту\r\n * @param {function} callback Функция, которая будет вызвана после нажатия на иконку реквизита. \r\n * В эту функцию первым параметром будет отправлена информация о реквизите.\r\n */\r\n setCustomAction: function (callback, opt_tooltip) {\r\n var me = this;\r\n me._customAction = {\r\n callback: callback,\r\n tooltip: opt_tooltip\r\n };\r\n\r\n if (me.isEditMode) {\r\n me._super(callback, opt_tooltip);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подсветить реквизит\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites.BaseRequisite#isRequired\r\n * @return {boolean} True – реквизит обязателен для заполнения, иначе False.\r\n * @param {integer} [opt_speed] скорость анимации\r\n * @param {string} [opt_color] цвет подсветки\r\n * @since 5.2.0.1300\r\n */\r\n highlight: function (opt_color, opt_speed) {\r\n var me = this;\r\n me._grid.dataView.flashCellById(me._data.row_id, me.name, opt_speed, opt_color);\r\n return me;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n global.WA.CMP.wrappers.form.requisites._details.editModeMixin = editModeMixin;\r\n})(window);","\"use strict\";\r\n\r\n/**\r\n* Базовый класс реквизита.\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.BaseRequisite\r\n* @extends WebAccess.components.wrappers.form.requisites.BaseRequisite\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @private\r\n* @since 5.2.0.1300\r\n*/\r\n(function (global) {\r\n\r\n const BaseRequisite = global.BaseRequisite.extend([global._details.editModeMixin], {\r\n className: 'DetailBaseRequisite'\r\n }); \r\n\r\n global._details.BaseRequisite = BaseRequisite;\r\n})(window.WA.CMP.wrappers.form.requisites);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Выбор из справочника» и «Множественный выбор» для детальных разделов.\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Reference\r\n* @extends WebAccess.components.wrappers.form.requisites.Reference\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @private\r\n*/\r\n(function (global) {\r\n\r\n const Reference = global.Reference.extend([global._details.editModeMixin], {\r\n className: 'DetailReference',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить фильтрацию по реквизитам справочника.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#setFilter\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.2.0.1300\r\n */\r\n setFilter: function (filter, opt_refCode) {\r\n var me = this;\r\n me._filter = filter;\r\n\r\n if (me.isEditMode) {\r\n me._super(filter, opt_refCode);\r\n }\r\n\r\n if (opt_refCode) me._filters[opt_refCode] = filter;\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Получить имена справочников для выборки.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#getReferences\r\n * @since 5.2.0.1300\r\n * @return {object} Имена справочников для выборки.\r\n */\r\n getReferences: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n return me._super();\r\n }\r\n return this._references;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить выборку из указанных справочников.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#setReferences\r\n * @param {object} references Информация о справочниках. Формат описания выборки:\r\n * {\"ОРГ\":{\"Caption\": \"организации\",...},\"РАБ\":{..}}}\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.2.0.1300\r\n */\r\n setReferences: function (references) {\r\n var me = this;\r\n me._references = references;\r\n if (me.isEditMode) {\r\n me._super(references);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить новый справочник к текущему списку справочников для выборки.\r\n *\r\n * @function WebAccess.components.wrappers.form.requisites._details.Reference#addReferences\r\n * @param {object} references Информация о справочниках. Формат описания выборки:\r\n * {\"ОРГ\":{\"Caption\": \"организации\",...},\"РАБ\":{..}}}\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.2.0.1300\r\n */\r\n addReferences: function (references) {\r\n var me = this;\r\n $.extend(me._references, references);\r\n if (me.isEditMode) {\r\n me._super(references);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Указать справочник, выбор из которого будет выполняться в первую очередь.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#setMainReference\r\n * @param {string} referenceName Справочник, выбор из которого будет выполняться в первую очередь\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Объект типа Reference.\r\n * @since 5.2.0.1300\r\n */\r\n setMainReference: function (referenceName) {\r\n var me = this;\r\n me._mainReference = referenceName;\r\n if (me.isEditMode) {\r\n me._super(referenceName);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавить справочник для выборки, из которого доступны последние и избранные объекты.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#addLastObjectsPseudoReference\r\n * @param {LAST_REFERENCES} lastReferences Справочники, из которых будет выполняться выбор\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Объект типа Reference.\r\n * @since 5.2.0.1300\r\n */\r\n addLastObjectsPseudoReference: function (lastReferences) {\r\n var me = this;\r\n me._addLastObjectsPseudoReference = true;\r\n me._lastReferences = lastReferences;\r\n if (me.isEditMode) {\r\n me._super(lastReferences);\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить из списка выборки справочник, из которого доступны последние и избранные объекты. \r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#removeLastObjectsPseudoReference\r\n * @param {LAST_REFERENCES} LastReferences Справочники, из которых будет выполняться выбор\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Объект типа Reference.\r\n * @since 5.2.0.1300\r\n */\r\n removeLastObjectsPseudoReference: function () {\r\n log.warning('REQUISITE', 'This method was changed in last version and may work improperly.');\r\n var me = this;\r\n me._addLastObjectsPseudoReference = false;\r\n me._lastReferences = null;\r\n if (me.isEditMode) {\r\n me._super();\r\n }\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /** \r\n * Установить значение отображаемых и неотображаемых реквизитов. \r\n *\r\n * @function WebAccess.components.wrappers.form.requisites._details.Reference#setValues\r\n * @fires NOT_IMPLEMENTED_EXCEPTION\r\n * @param {object} newValues Новые значения множественного выбора\r\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.0.0.7100\r\n */\r\n setValues: function (newValues, needTriggerResult) {\r\n WA.raise('NOT_IMPLEMENTED_EXCEPTION')\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает значения реквизита.\r\n * Формат записи метода: [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...].\r\n *\r\n * @fires NOT_IMPLEMENTED_EXCEPTION\r\n * @function WWebAccess.components.wrappers.form.requisites._details.Reference#getValues\r\n * @return [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...] Массив объектов значений реквизита – currentValues.\r\n * @since 5.4.0.1012\r\n */\r\n getValues: function () {\r\n WA.raise('NOT_IMPLEMENTED_EXCEPTION')\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавляет новые значения отображаемых и неотображаемых реквизитов к уже существующим.\r\n * Формат записи метода: [{groupcode:'код справочника', id:'ид записи', name:'наименование'}, ...].\r\n *\r\n * @fires NOT_IMPLEMENTED_EXCEPTION\r\n * @function WebAccess.components.wrappers.form.requisites._details.Reference#addValues\r\n * @param {object} newValues Новые значения множественного выбора\r\n * @param {boolean} needTriggerResult Вызвать триггер для события типа change\r\n * @return {WebAccess.components.wrappers.form.requisites.Reference} Текущий объект реквизита – Reference.\r\n * @since 5.4.0.1012\r\n */\r\n addValues: function (newValues, needTriggerResult) {\r\n WA.raise('NOT_IMPLEMENTED_EXCEPTION')\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Привязка вызова справочника в модальном окне по клику на иконке в поле ввода.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#bindReferenceGridDialog\r\n * @since 5.4.0.1012\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Текущий объект реквизита – Reference.\r\n */\r\n bindReferenceGridDialog: function () {\r\n var me = this;\r\n me._bindReferenceGridDialog = true;\r\n if (me.isEditMode) {\r\n me._super();\r\n }\r\n return me;\r\n }\r\n });\r\n\r\n global._details.Reference = Reference;\r\n})(window.WA.CMP.wrappers.form.requisites);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Ссылка на документ» для детальных разделов.\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Document\r\n* @extends WebAccess.components.wrappers.form.requisites.Document\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @private\r\n*/\r\n(function (global) {\r\n\r\n const Document = global.Document.extend([global._details.editModeMixin], {\r\n className: 'DetailDocument'\r\n });\r\n\r\n global._details.Document = Document;\r\n})(window.WA.CMP.wrappers.form.requisites);","\"use strict\";\r\n\r\n/**\r\n* Реквизит типа «Строка» и «Многострочный текст».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Text\r\n* @extends WebAccess.components.wrappers.form.requisites.Text\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @since 5.2.0.1300\r\n*/\r\n(function (global) {\r\n\r\n const Text = global.Text.extend([global._details.editModeMixin], {\r\n className: 'DetailText'\r\n });\r\n\r\n global._details.Text = Text;\r\n})(window.WA.CMP.wrappers.form.requisites);","\"use strict\";\r\n\r\n/**\r\n* Класс для реквизита типа «Дата».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Date\r\n* @extends WebAccess.components.wrappers.form.requisites.Date\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @private\r\n* @since 5.2.0.1300\r\n*/\r\n(function (global) {\r\n\r\n const Date = global.Date.extend([global._details.editModeMixin], {\r\n className: 'DetailDate',\r\n\r\n /**\r\n * Показывается ли время в реквизите.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Date#isShowTime\r\n * @return {boolean} True – реквизит показывает время, иначе False.\r\n * @since 5.2.0.2006\r\n */\r\n isShowTime: function () {\r\n var me = this;\r\n if (me.isEditMode) {\r\n return me._super();\r\n }\r\n var cols = me._grid._columns;\r\n var curCol = _(cols).findWhere({ 'id': me.name });\r\n if (curCol) {\r\n return curCol.dateType === 'DateTime';\r\n } else {\r\n return false;\r\n }\r\n }\r\n });\r\n\r\n global._details.Date = Date;\r\n})(window.WA.CMP.wrappers.form.requisites);\r\n\r\n\r\n","\"use strict\";\r\n\r\n/**\r\n* Реквизит карточки типа «Признак».\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Pick\r\n* @extends WebAccess.components.wrappers.form.requisites.Pick\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @since 5.2.0.1300\r\n* @private\r\n*/\r\n(function (global) {\r\n\r\n const Pick = global.Pick.extend([global._details.editModeMixin], {\r\n className: 'DetailPick',\r\n \r\n /**\r\n * Указать справочник, выбор из которого будет выполняться в первую очередь.\r\n *\r\n * @method WebAccess.components.wrappers.form.requisites._details.Reference#setMainReference\r\n * @param {string} referenceName Справочник, выбор из которого будет выполняться в первую очередь\r\n * @return {WebAccess.components.wrappers.form.requisites._details.Reference} Объект типа Reference.\r\n * @since 5.2.0.1300\r\n */\r\n \r\n clearValues: function(referenceName) {\r\n var me = this;\r\n me._clearPick = true;\r\n me._pickValues = [];\r\n\r\n if (me.isEditMode) {\r\n me._super(referenceName);\r\n }\r\n return me;\r\n },\r\n\r\n addValue: function (value, displayValue, opt_isDisabled) {\r\n var me = this;\r\n me._pickValues.push([value, displayValue, opt_isDisabled]);\r\n\r\n if (me.isEditMode) {\r\n me._super(value, displayValue, opt_isDisabled);\r\n }\r\n return me;\r\n }\r\n });\r\n\r\n global._details.Pick = Pick;\r\n})(window.WA.CMP.wrappers.form.requisites);\r\n\r\n\r\n","\"use strict\";\r\n\r\n/**\r\n* Класс для числовых реквизитов.\r\n* \r\n* @class WebAccess.components.wrappers.form.requisites._details.Integer\r\n* @extends WebAccess.components.wrappers.form.requisites.Integer\r\n* @mixes WebAccess.components.wrappers.form.requisites._details.editModeMixin\r\n* @private\r\n* @since 5.0.0.7100\r\n*/\r\n(function (global) {\r\n\r\n const Integer = global.Integer.extend([global._details.editModeMixin], {\r\n className: 'DetailInteger'\r\n });\r\n\r\n global._details.Integer = Integer;\r\n})(window.WA.CMP.wrappers.form.requisites);\r\n\r\n\r\n","\"use strict\";\r\n\r\n/**\r\n* Детальный набор данных.\r\n* \r\n* @class WebAccess.components.wrappers.details.Detail\r\n* @extends BaseObject\r\n* @property {string} name Номер набора данных\r\n* @property {string} tableName DFM-имя элемента управления таблицы\r\n* @param {string} itemSelector Существующий элемент страницы\r\n*/\r\n(function (global) {\r\n\r\n var Detail = BaseObject.extend({\r\n _useTable: null,\r\n _jTables: null,\r\n _current: null,\r\n\r\n init: function (itemSelector, opt_params) {\r\n this._super(itemSelector);\r\n if (opt_params) this._current = opt_params.current;\r\n\r\n this._jObject = $(itemSelector);\r\n this.name = this._jObject.data('detailSectionNumber');\r\n this.tableName = this._jObject.attr('id');\r\n this._jTables = $('.Reference_Detail').filter('[data-detail-section-number=' + this.name + ']');\r\n },\r\n\r\n className: 'Detail',\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Определяет таблицу, с которой связан детальный раздел\r\n * @function WebAccess.components.wrappers.details.Detail#useTable\r\n * @return WebAccess.components.wrappers.details.Detail.\r\n * @since 5.0.2.1301\r\n */\r\n useTable: function(tableName) {\r\n this._useTable = tableName;\r\n return this;\r\n },\r\n\r\n /**\r\n * Добавление новой записи в детальный раздел. (Если можно, избегайте пока использование этой функции, \r\n * очень велика вероятность, что её поведение кардинально изменится в будущем);\r\n * @function WebAccess.components.wrappers.details.Detail#append\r\n * @return WebAccess.components.wrappers.details.Detail\r\n */\r\n append: function () {\r\n var tableName = this._useTable || this.tableName;\r\n this._current.form.controls.tables[tableName].addRow();\r\n return this;\r\n },\r\n\r\n\r\n /**\r\n * Получить все записи детального раздела.\r\n * @function WebAccess.components.wrappers.details.Detail#getRecords\r\n * @return {WebAccess.components.wrappers.form.TableRow} Oбъект класса TableRow.\r\n */\r\n getRecords: function () {\r\n var tableName = this._useTable || this.tableName;\r\n return this._current.form.controls.tables[tableName].getRows();\r\n },\r\n\r\n\r\n /**\r\n * Получает таблицу, связанную с данным детальным разделом. \r\n * @function WebAccess.components.wrappers.details.Detail#getTable\r\n * @param {string} [opt_tableName] Имя таблицы\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.2.0.1303\r\n */\r\n getTable: function (opt_tableName) {\r\n var tableName = opt_tableName || this._useTable || this.tableName;\r\n return this._current.form.controls.tables[tableName];\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает все таблицы данного детального раздела.\r\n * @function WebAccess.components.wrappers.details.Detail#getTables\r\n * @return {WebAccess.components.wrappers.form.Table} Объект типа Table.\r\n * @since 5.2.0.1303\r\n */\r\n getTables: function () {\r\n var me = this;\r\n var tables = new WA.Collection();\r\n \r\n $(this._jTables).each(function (el) {\r\n var name = $(this).attr('id');\r\n var table = me._current.form.controls.tables[name];\r\n if (typeof table !== 'undefined')\r\n tables.addElement(name, table);\r\n });\r\n return tables;\r\n }\r\n });\r\n\r\n global.Detail = Detail;\r\n})(window.WebAccess.components.wrappers.details);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Шаблоны ячеек\r\n */\r\n var TEMPLATES = {\r\n CELL: 'components/grid/cell.compile.html',\r\n CELL_WITH_MENU: 'components/grid/contextMenuCell.compile.html'\r\n };\r\n\r\n /**\r\n * Дата-аттрибуты контейнеров\r\n * @inner\r\n */\r\n var DATA_ATTR = {\r\n COLUMNS: 'columns',\r\n SECTION_NUMBER: 'detailSectionNumber',\r\n BUILDER_EVENTS_ENABLED: 'builderEventsEnabled',\r\n COLUMN_AUTO_WIDTH: 'columnAutoWidth'\r\n };\r\n\r\n /**\r\n * Поиск и создание таблиц детальных разделов.\r\n * \r\n * @class WebAccess.components.wrappers.details.DetailsInitializer\r\n * @extends BaseObject\r\n * @property {Array} gridInstances экземпляры таблиц \r\n * @param {String} detailsSelector селектор контейнеров детальных разделов\r\n * @param {WebAccess.components.dataViews.BaseDataProvider} DataProviderClass \r\n * @since 5.2.0.1600\r\n */\r\n var DetailsInitiializer = BaseObject.extend({\r\n gridInstances: null,\r\n\r\n _detailsSelector: null,\r\n _dv: null,\r\n _jDetails: null,\r\n _cellMarkUp: null,\r\n _templates: null,\r\n _contextMenuMarKUp: null,\r\n _form: null,\r\n\r\n init: function (detailsSelector, DataProviderClass, dataProviderOptions, ContextMenuClass, current) {\r\n var me = this;\r\n me._super(detailsSelector);\r\n me._current = current;\r\n\r\n me.DataProviderClass = DataProviderClass;\r\n me.dataProviderOptions = dataProviderOptions;\r\n\r\n me.ContextMenuClass = ContextMenuClass;\r\n var templates = {};\r\n var load = WA.templates.load;\r\n\r\n $.when(\r\n load(TEMPLATES.CELL),\r\n load(TEMPLATES.CELL_WITH_MENU)\r\n ).done(function (cell, cellWithMenu) {\r\n templates.cellMarkUp = cell;\r\n templates.contextMenuMarkUp = cellWithMenu;\r\n\r\n me.gridInstances = {};\r\n me._templates = templates;\r\n me._dv = WA.CMP.dataViews;\r\n me._detailsSelector = detailsSelector;\r\n\r\n me._jDetails = $(me._detailsSelector);\r\n\r\n me._setTemplates();\r\n me._initializeGridInstances();\r\n setTimeout(function () {\r\n me.fire(DetailsInitiializer.EVENT.COMPLETE, me);\r\n }, 0)\r\n });\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Поиск и создание экземпляров таблиц\r\n * @private\r\n * @method WebAccess.components.wrappers.details.DetailsInitializer#_initializeGridInstances\r\n * @return {WebAccess.components.wrappers.details.DetailsInitializer}\r\n */\r\n _initializeGridInstances: function () {\r\n var me = this;\r\n var isSideBarBindEventBeforeTab = false;\r\n\r\n me._jDetails.each(function () {\r\n var jTable = $(this);\r\n\r\n var dfmName = jTable.attr('id');\r\n var columns = me._getExtraColumns();\r\n var sectionNumber = +jTable.data(DATA_ATTR.SECTION_NUMBER);\r\n var columnAutoWidth = jTable.data(DATA_ATTR.COLUMN_AUTO_WIDTH);\r\n\r\n var isBuilderEventsEnabled = jTable.data(DATA_ATTR.BUILDER_EVENTS_ENABLED);\r\n var dataProvider = new me.DataProviderClass($.extend({}, me.dataProviderOptions, {\r\n DetailSectionNumber: sectionNumber,\r\n DFMName: dfmName\r\n }), me._current);\r\n\r\n columns = columns.concat(jTable.data(DATA_ATTR.COLUMNS));\r\n var sortedColumns = {};\r\n var num = 0;\r\n Object.keys(columns).sort(function (a, b) {\r\n return columns[a].Index - columns[b].Index;\r\n }).forEach(function (index) {\r\n sortedColumns[num++] = columns[index];\r\n });\r\n\r\n var getCellTemplate = function (rowNumber, cellNumber, value, columnDef, dataContext) {\r\n var refCode = '';\r\n if (columnDef.type == REQUISITE_TYPE.REFERENCE && columnDef.requisite) {\r\n refCode = columnDef.requisite.referenceName;\r\n }\r\n var recordId = dataContext.id;\r\n switch (columnDef.id) {\r\n case '_contextMenu':\r\n return me._contextMenuMarkUp.render({ index: dfmName, recordId: recordId });\r\n default:\r\n var valueId = dataContext[columnDef.id];\r\n\r\n //Для кастомных реквизитов не отображаем ссылку \"Открыть карточку\"\r\n var isCustomSelect = false;\r\n if (columnDef.requisite.settings) {\r\n var settings = $.parseJSON(columnDef.requisite.settings);\r\n isCustomSelect = settings.isCustomSelect;\r\n }\r\n\r\n return me._cellMarkUp.render({\r\n displayOpenCard: (!isCustomSelect && (!!valueId && valueId !== '*' && !!refCode)),\r\n id: valueId,\r\n value: value,\r\n refCode: refCode,\r\n openCardButtonTitle: L('OPEN_CARD')\r\n });\r\n }\r\n };\r\n\r\n var grid;\r\n\r\n var getRowAdditionalInfo = function (rowNumber, data) {\r\n var row = data.getItem(rowNumber);\r\n if (row && row.__nonDataRow !== true) {\r\n return {\r\n cssClasses: 'List',\r\n attributes: {\r\n 'id': row.id,\r\n 'kind': 'REF',\r\n 'compcode': WA.CR.getReferenceCode(),\r\n 'data-recid': row.id,\r\n 'contextmenu': function (event) {\r\n grid.openContextMenu(this, event);\r\n },\r\n 'click': function (event) {\r\n if (event.target && $(event.target).is('.popup_menu')) {\r\n grid.openContextMenu(this, event);\r\n }\r\n }\r\n }\r\n };\r\n }\r\n };\r\n\r\n //Инициализируем грид\r\n grid = new me._dv.Grid(jTable, dataProvider, sortedColumns, {\r\n plugins: me._getAvailablePlugins(dfmName),\r\n getRowAdditionalInfo: getRowAdditionalInfo,\r\n cellTemplate: getCellTemplate,\r\n isBuilderEventsSupported: isBuilderEventsEnabled,\r\n DFMName: dfmName,\r\n sectionNumber: sectionNumber,\r\n current: me._current\r\n });\r\n\r\n grid.autoAdjustColumnWidth(columnAutoWidth);\r\n\r\n //Добавляем контекстное меню при клике в пустое место \r\n if (me.ContextMenuClass) {\r\n jTable.find('.slick-viewport').on('contextmenu', function (ev) {\r\n grid.openContextMenu(this, ev);\r\n });\r\n }\r\n\r\n me.gridInstances[dfmName] = grid;\r\n\r\n me._current.Init.done(function () {\r\n if (!isSideBarBindEventBeforeTab) {\r\n isSideBarBindEventBeforeTab = true;\r\n var sideBar = me._current.sideBar;\r\n // При переключении вкладки отправляем запрос на сервер для установки \r\n // значений реквизитов, но не сохраняем в базу. После проверяем если есть \r\n // такой же детальный раздел на переключаемой вкладке, то перезагружаем \r\n // (подтягиваем новые данные с сервера) этот детальный раздел. \r\n sideBar.bind(sideBar['class'].EVENT.BEFORE_TAB_SWITCH, function () {\r\n var currentTabName = sideBar.tabs.current.name;\r\n _(_(me._current.form.controls.tables).filter(function (table) {\r\n return table.isChanged() && table.parentTabName === currentTabName;\r\n })).each(function (table) {\r\n var details = me._current.details[table.detailNum];\r\n me._current.form.save(function () {\r\n _(details.getTables().toArray()).each(function (table) {\r\n table.reloadData();\r\n table._isChanged = false;\r\n })\r\n }, false);\r\n })\r\n });\r\n }\r\n });\r\n });\r\n\r\n return me;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Ожидание загрузки данных.\r\n * @method WebAccess.components.wrappers.details.DetailsInitializer#waitForData\r\n * @return {Deferred} Специальный Deferred-объект.\r\n */\r\n waitForData: function () {\r\n var me = this;\r\n var stateVariable = $.Deferred();\r\n\r\n //Инициализацию гридов делать не всегда, а только где они есть\r\n if ($.isEmptyObject(me.gridInstances)) {\r\n stateVariable.resolve();\r\n return stateVariable;\r\n }\r\n\r\n var states = [];\r\n for (var detailName in me.gridInstances) {\r\n var state = $.Deferred();\r\n states.push(state);\r\n (function (state) { //замкнуто, чтобы state нужный был внутри\r\n me.gridInstances[detailName].bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, function (data) {\r\n state.resolve();\r\n });\r\n })(state);\r\n }\r\n\r\n $.when.apply($, states).done(function () {\r\n stateVariable.resolve();\r\n });\r\n return stateVariable;\r\n },\r\n\r\n _getExtraColumns: function () {\r\n var columns = [];\r\n if (WA.ENV.isTouch()) {\r\n columns.push({\r\n Caption: ' ',\r\n Field: '_contextMenu',\r\n Name: '_contextMenu',\r\n IsVisible: true,\r\n type: REQUISITE_TYPE.EMPTY,\r\n Width: 30,\r\n Index: 0\r\n });\r\n }\r\n\r\n return columns;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n\r\n /**\r\n * Заполнение обьектов шаблонов\r\n * @method WebAccess.components.wrappers.details.DetailsInitializer#_setTemplates\r\n * @return {Deferred} Специальный Deferred-объект.\r\n */\r\n _setTemplates: function () {\r\n var me = this;\r\n me._cellMarkUp = me._templates.cellMarkUp;\r\n me._contextMenuMarkUp = me._templates.contextMenuMarkUp;\r\n },\r\n //-----------------------------------------------------------------------//\r\n\r\n /**\r\n * Заполнение обьектов шаблонов\r\n * @method WebAccess.components.wrappers.details.DetailsInitializer#_getAvailablePlugins\r\n * @return {Deferred} Специальный Deferred-объект.\r\n */\r\n _getAvailablePlugins: function (dfmName) {\r\n var me = this;\r\n var plugins = [\r\n new me._dv.gridPlugins.EditPlugin(),\r\n new me._dv.gridPlugins.SortingPlugin(),\r\n new me._dv.gridPlugins.ColumnResizePlugin({\r\n // Отключаем в плагине реакцию на ресайз окна, т.к. на планшетах\r\n // ресайз вызывает появление клавиатуры в редактируемых ячейках, \r\n // а после этого события грид перестраивается и клавиатура \r\n // убирается (замечание №103899). Да и незачем детальным разделам \r\n // изменять свой размер или перерисовываться.\r\n \"disableOnResizeBinding\": true\r\n })\r\n ];\r\n if (me.ContextMenuClass) {\r\n var menu = new me.ContextMenuClass(dfmName);\r\n plugins.push(new me._dv.gridPlugins.ContextMenuPlugin(menu, me._current))\r\n };\r\n return plugins;\r\n }\r\n //-----------------------------------------------------------------------//\r\n }, {\r\n EVENT: {\r\n COMPLETE: 'complete'\r\n }\r\n //-----------------------------------------------------------------------//\r\n });\r\n\r\n global.DetailsInitiializer = DetailsInitiializer;\r\n})(window.WebAccess.components.wrappers.details);","\"use strict\";\r\n\r\n/**\r\n* Всплывающее сообщение.\r\n* \r\n* @class WebAccess.components.notifications.Toast\r\n* @since 5.0.0.4305\r\n* @extends BaseObject\r\n* @property {object} [opt_settings] Параметры уведомления\r\n* @example\r\n* // Показать всплывающее сообщение с текстом «Hello world».\r\n* var toast = new WA.CMP.NTF.Toast()\r\n* toast.showMessage(\"Hello world\");\r\n*/\r\n(function (global) {\r\n var Toast = BaseObject.extend({\r\n \r\n init: function (opt_settings) { \r\n this._super(opt_settings);\r\n\r\n if ($.isPlainObject(opt_settings)) {\r\n $.extend(this, opt_settings);\r\n };\r\n\r\n $.toast.config.align = this.align; \r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// \r\n className: 'Toast',\r\n align: 'right',\r\n id: null,\r\n\r\n /**\r\n * Показать сообщение с текстовой информацией.\r\n *\r\n * @method WebAccess.components.notifications.Toast#showMessage\r\n * @param {string} message Текст сообщения\r\n * @param {boolean} [opt_sticky] Признак закрытия сообщения по кнопке «Закрыть». Возможные значения: true, false\r\n * @param {integer} [opt_duration] Продолжительность показа сообщения\r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n */\r\n showMessage: function (msg, opt_sticky, opt_duration) { \r\n this.show(msg, \"info\", opt_sticky, opt_duration)\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показывает сообщение об успешно выполненной операции.\r\n *\r\n * @method WebAccess.components.notifications.Toast#showSuccess\r\n\t* @param {string} message Текст сообщения\r\n * @param {boolean} [opt_sticky] Признак закрытия сообщения по кнопке «Закрыть». Возможные значения: true, false\r\n * @param {integer} [opt_duration] Продолжительность показа сообщения\r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n */\r\n showSuccess: function (msg, opt_sticky, opt_duration) {\r\n // В JQuery.Toast есть опечатка в Success, поэтому здесь используется именно succecc!\r\n this.show(msg, \"succecc\", opt_sticky, opt_duration)\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать сообщение с предупреждением.\r\n *\r\n * @method WebAccess.components.notifications.Toast#showWarning\r\n * @param {string} message Текст сообщения\r\n * @param {boolean} [opt_sticky] Признак закрытия сообщения по кнопке «Закрыть». Сообщение требуется закрыть вручную. Возможные значения: true, false \r\n * @param {integer} [opt_duration] Продолжительность показа сообщения \r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n */\r\n showWarning: function (msg, opt_sticky, opt_duration) {\r\n this.show(msg, \"warning\", opt_sticky, opt_duration)\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать сообщение об ошибке.\r\n *\r\n * @method WebAccess.components.notifications.Toast#showError\r\n * @param {string} message Текст сообщения\r\n * @param {boolean} [opt_sticky] Признак закрытия сообщения по кнопке «Закрыть». Возможные значения: true, false\r\n * @param {integer} [opt_duration] Продолжительность показа сообщения\r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n */\r\n showError: function (msg, opt_sticky, opt_duration) {\r\n this.show(msg, \"error\", opt_sticky, opt_duration)\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Показать сообщение.\r\n *\r\n * @method WebAccess.components.notifications.Toast#show\r\n * @param {string} msg Текст сообщения\r\n * @param {MESSAGE_TYPE} [opt_type] Тип сообщения (ошибка, предупреждение, информация)\r\n * @param {boolean} [opt_sticky] Признак закрытия сообщения по кнопке «Закрыть». Возможные значения: true, false\r\n * @param {number} [opt_duration] Продолжительность показа сообщения\r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n */\r\n show: function (msg, opt_type, opt_sticky, opt_duration) {\r\n this.id = $.toast(msg, {\r\n type: opt_type || 'success',\r\n sticky: opt_sticky || 'false',\r\n duration: opt_duration || 2000,\r\n });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n \r\n /**\r\n * Скрыть последнее сообщение.\r\n *\r\n * @method WebAccess.components.notifications.Toast#hide \r\n * @return {WebAccess.components.notifications.Toast} Объект класса Toast.\r\n * @since 5.0.0.4312\r\n */\r\n hide: function () {\r\n if (this.id) $(\"#\"+this.id).remove();\r\n else global.Toast.hideAll();\r\n return this;\r\n }\r\n });\r\n\r\n global.Toast = Toast;\r\n\r\n /**\r\n * Скрыть все сообщения.\r\n *\r\n * @function WebAccess.components.notifications.Toast.hideAll\r\n * @static\r\n * @since 5.0.0.4312\r\n */\r\n global.Toast.hideAll = function () {\r\n $(\"ul.toast.active li\").remove();\r\n }\r\n\r\n})(window.WebAccess.components.notifications);","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n var tabSelector = \"div.explorer-search-panel__item\";\r\n var actionButtonSelector = '.action-button';\r\n\r\n /**\r\n * Класс-обертка для закладки в проводнике.\r\n * @class WebAccess.components.wrappers.sideBar.Tabs\r\n * @extends WebAccess.Collecton\r\n * @since 5.2.0.1600 \r\n */\r\n var _ExplorerTab = WebAccess.components.wrappers.BasePageElement.extend({\r\n dfmName: '',\r\n\r\n // Конструктор.\r\n init: function (itemSelector, opt_current) {\r\n var me = this;\r\n me._jObject = $(itemSelector)\r\n me._super(me._jObject);\r\n\r\n me.selector = format(me._byNameSelectorTemplate, tabSelector, me.name);\r\n me.dfmName = me._jObject.data('name');\r\n\r\n me._jActionButon = me._jObject.find(actionButtonSelector);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Имитировать щелчок мыши.\r\n * Имитация щелчка мыши на кнопке либо установка обработчика на событие onClick, если передан callback. \r\n * Заменяет обработчик, установленный по умолчанию. Используется в прикладной разработке.\r\n * \r\n * @param {function} [opt_callback] Функция, которая будет вызвана после щелчка мыши по кнопке\r\n * @method WebAccess.components.wrappers.BasePageElement#click\r\n * @throws ERR_OBJECT_IS_ALREADY_RENDERED – объект уже отображен.\r\n * @return {WebAccess.components.wrappers.BasePageElement} Объект типа BasePageElement.\r\n *\r\n * @example\r\n * WebAccess.current.toolBar.buttons.CrtRefRecords.click();\r\n * WebAccess.current.toolBar.buttons.CrtRefRecords.click(function() {\r\n * alert(\"Существующие обработчки событий click были перезаписаны данным\");\r\n * })\r\n */\r\n click: function (opt_callback) {\r\n var instance = this;\r\n if ($.isFunction(opt_callback)) {\r\n this._disableClickHandler(this._jActionButon);\r\n this.unbind('click').bind(\"click\", opt_callback);\r\n } else {\r\n this._jActionButon.click();\r\n }\r\n return this;\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n });\r\n\r\n global.components.wrappers.sideBar._ExplorerTab = _ExplorerTab;\r\n\r\n})(window.WebAccess);","'use strict';\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Класс-обертка для панели действий.\r\n *\r\n * @class WebAccess.components.wrappers.toolBar.ReactToolBar\r\n * @extend BaseReactObject\r\n * @since 5.6.0.1300\r\n */\r\n class ReactToolBar extends BaseReactObject {\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#init\r\n * @param {object} model Модель панели действий.\r\n * @override\r\n * @see BaseReactObject#init\r\n */\r\n constructor(model) {\r\n super(model);\r\n \r\n /**\r\n * Имя класса.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#className\r\n * @override\r\n * @see BaseReactObject#className\r\n */\r\n this.className = 'ReactToolBar';\r\n\r\n /**\r\n * Список событий изменения кнопок.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#_buttonChangeEvents\r\n */\r\n this._buttonChangeEvents = null;\r\n\r\n /**\r\n * Список действий и соответствующих им кнопок на ленте.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#_buttonsByActionName\r\n */\r\n this._buttonsByActionName = {};\r\n\r\n /**\r\n * Список режимов доступности и соответствующих им действий.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#_buttonsByEnabledMode\r\n */\r\n this._buttonsByEnabledMode = {};\r\n\r\n /**\r\n * Список кнопок, состояние которых изменяется в зависимости от выделения вложений.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#_buttonsEnabledOnAttachmentSelection\r\n */\r\n this._buttonsEnabledOnAttachmentSelection = [];\r\n\r\n /**\r\n * Список событий изменения групп.\r\n *\r\n * @private\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#_groupChangeEvents\r\n */\r\n this._groupChangeEvents = null;\r\n\r\n /**\r\n * Список кнопок панели действий.\r\n *\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#buttons\r\n * @deprecated since 5.6. Use toolbar methods instead.\r\n */\r\n this.buttons = {};\r\n\r\n /**\r\n * Список групп кнопок панели действий.\r\n *\r\n * @property WebAccess.components.wrappers.toolBar.ReactToolBar#groups\r\n * @deprecated since 5.6. Use toolbar methods instead.\r\n */\r\n this.groups = {};\r\n \r\n var me = this;\r\n\r\n me.buttons = {};\r\n me.groups = {};\r\n\r\n\r\n // Сформировать списки событий\r\n var basePageElementEvents = global.utils.getAssociativeArrayValues(WebAccess.components.wrappers.AbstractBasePageElement.EVENT);\r\n me._groupChangeEvents = basePageElementEvents.concat(\r\n global.utils.getAssociativeArrayValues(WebAccess.components.wrappers.toolBar.ReactToolBarGroup.EVENT)\r\n );\r\n me._buttonChangeEvents = basePageElementEvents.concat(\r\n global.utils.getAssociativeArrayValues(WebAccess.components.wrappers.toolBar.ReactToolBarButton.EVENT)\r\n );\r\n\r\n // Инициализируем список групп\r\n model.groups.forEach(function (groupModel) {\r\n var currentGroup = new WebAccess.components.wrappers.toolBar.ReactToolBarGroup(groupModel);\r\n me.groups[groupModel.name] = currentGroup;\r\n\r\n // Подписаться на события изменения группы\r\n me._bindOnGroupChangeEvents(currentGroup);\r\n\r\n // Добавить список кнопок в группе в buttons\r\n groupModel.buttons.forEach(function (buttonModel) {\r\n var currentButton = new WebAccess.components.wrappers.toolBar.ReactToolBarButton(buttonModel, groupModel.name);\r\n me.buttons[buttonModel.name] = currentButton;\r\n\r\n // Подписаться на события изменения кнопки\r\n me._bindOnButtonChangeEvents(currentButton);\r\n });\r\n });\r\n\r\n // Сформировать списки\r\n global.utils.getAssociativeArrayValues(me.buttons).forEach(function (item) {\r\n // Действия и соответствующие им кнопки\r\n var linkedAction = item.getLinkedAction();\r\n var buttons = null;\r\n if (linkedAction) {\r\n buttons = me._buttonsByActionName[linkedAction];\r\n if (buttons) {\r\n buttons.push(item);\r\n } else {\r\n me._buttonsByActionName[linkedAction] = [item];\r\n }\r\n }\r\n\r\n // Режимы доступности и соответствующие им кнопки\r\n var enabledMode = item.getEnabledMode();\r\n if (enabledMode) {\r\n buttons = me._buttonsByEnabledMode[enabledMode];\r\n if (buttons) {\r\n buttons.push(item);\r\n } else {\r\n me._buttonsByEnabledMode[enabledMode] = [item];\r\n }\r\n }\r\n\r\n // Сформировать список кнопок, состояния которых изменяются в зависимости от выделения элементов\r\n if (item.getIsEnabledOnAttachnentSelected()) {\r\n me._buttonsEnabledOnAttachmentSelection.push(item);\r\n }\r\n });\r\n\r\n // Расширить коллекции\r\n me._extendGroupCollection();\r\n me._extendButtonCollection();\r\n }\r\n\r\n /**\r\n * Признак скрытого тулбара.\r\n *\r\n * @method getIsHidden\r\n * @return {boolean} True - тулбар скрыт, иначе False.\r\n */\r\n getIsHidden() {\r\n return this._model.isHidden;\r\n }\r\n\r\n /**\r\n * Список событий, генерируемых реактивным тулбаром.\r\n *\r\n * @property EVENT\r\n * @return {{CHANGE_STATE: string}}\r\n * @static\r\n */\r\n static get EVENT() {\r\n return {\r\n // Событие, срабатывающее при изменении модели панели действий.\r\n CHANGE_STATE: 'changeState'\r\n };\r\n }\r\n\r\n /**\r\n * Проверка на наличие кнопок, которые можно свернуть.\r\n *\r\n * @method _hasExpandedButtons\r\n * @param {object} group Группа, в которой проверяется наличие таких кнопок.\r\n * @private\r\n * @return {boolean} True - кнопки, которые можно свернуть, присутствуют, иначе False.\r\n * @static\r\n *\r\n */\r\n static _hasExpandedButtons(group) {\r\n return group.buttons.some((button) => {\r\n return !group.isCollapsed && button.isCaptionVisible && !button.isCollapsed;\r\n });\r\n }\r\n\r\n /**\r\n * Получить группу с наименьшим приоритетом.\r\n *\r\n * @method _lowestPriorityGroup\r\n * @param {Array} groups Список групп, в которых производится поиск группы.\r\n * @param {function} condition Функция с дополнительным условием проверки.\r\n * @private\r\n * @return {object} Группа с наименьшим приоритетом.\r\n * @static\r\n */\r\n static _lowestPriorityGroup(groups, condition) {\r\n let priorityCriteria = Infinity;\r\n let resultGroup = null;\r\n\r\n for (const group of groups) {\r\n if (group.priority < priorityCriteria && condition(group)) {\r\n priorityCriteria = group.priority;\r\n resultGroup = group;\r\n }\r\n }\r\n\r\n return resultGroup;\r\n }\r\n\r\n /**\r\n * Найти или создать группу \"Еще\".\r\n *\r\n * @method _findOrCreateGroupMore\r\n * @param {object} model Модель тулбара.\r\n * @private\r\n * @return {object} Группа \"Еще\".\r\n * @static\r\n */\r\n static _findOrCreateGroupMore(model) {\r\n const GROUP_MORE_NAME = 'MORE'; // name группы \"Ещё\"\r\n\r\n let groupMore = model.groupMore;\r\n if (!groupMore) {\r\n for (const group of model.groups) {\r\n if (group.name === GROUP_MORE_NAME) {\r\n groupMore = group;\r\n break;\r\n }\r\n }\r\n\r\n if (!groupMore) {\r\n groupMore = {\r\n caption: L(GROUP_MORE_NAME),\r\n isCollapsed: true,\r\n minimizedGroupIcon: null,\r\n name: GROUP_MORE_NAME\r\n };\r\n groups.push(groupMore);\r\n }\r\n\r\n model.groupMore = groupMore;\r\n }\r\n\r\n return groupMore;\r\n }\r\n\r\n\r\n /**\r\n * Проверяет наличие кнопок для перемещения в группу \"Еще\".\r\n *\r\n * @method _hasButtonToMove\r\n * @param {object} group Группа, в которой производится поиск.\r\n * @private\r\n * @return {boolean} True - кнопки для перемещения есть, иначе False.\r\n * @static\r\n */\r\n static _hasButtonToMove(group) {\r\n return group.buttons.some((button) => {\r\n return !group.isCollapsed && button.isVisible && !button.isMoved;\r\n });\r\n }\r\n\r\n /**\r\n * Пеереместить кнопку из группы в группу \"Еще\".\r\n *\r\n * @method _reduceGroup\r\n * @param {object} group Группа, из которой производится перемещение.\r\n * @param {object} groupMore Группа \"Еще\".\r\n * @private\r\n * @static\r\n */\r\n static _reduceGroup(group, groupMore) {\r\n for (const button of group.buttons) {\r\n if (button.isVisible && !button.isMoved) {\r\n button.isMoved = true;\r\n button.groupName = group.name;\r\n groupMore.buttons.push(button);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Переместить одну кнопку в группу \"Еще\".\r\n *\r\n * @method _toolbarMoveOneButton\r\n * @param {object} model Модель тулбара.\r\n * @param {function} callback Функция обратного вызова.\r\n * @private\r\n * @static\r\n */\r\n static _toolbarMoveOneButton(model, callback) {\r\n const group = ReactToolBar._lowestPriorityGroup(model.groups, ReactToolBar._hasButtonToMove);\r\n if (group) {\r\n const groupMore = ReactToolBar._findOrCreateGroupMore(model);\r\n ReactToolBar._reduceGroup(group, groupMore);\r\n if (typeof callback === 'function' || callback instanceof Function) {\r\n callback();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Свернуть группу.\r\n *\r\n * @method _compactGroup\r\n * @param {object} group Группа, которую нужно свернуть.\r\n * @private\r\n * @static\r\n */\r\n static _compactGroup(group) {\r\n for (const button of group.buttons) {\r\n if (!group.isCollapsed && button.isCaptionVisible && !button.isCollapsed) {\r\n button.isCollapsed = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Свернуть одну кнопку тулбара.\r\n *\r\n * @method toolbarCollapseOneButton\r\n * @param {object} model Модель тулбара.\r\n * @param {function} callback Функция обратного вызова.\r\n * @static\r\n */\r\n static toolbarCollapseOneButton(model, callback) {\r\n const group = ReactToolBar._lowestPriorityGroup(model.groups, ReactToolBar._hasExpandedButtons);\r\n\r\n if (group) {\r\n ReactToolBar._compactGroup(group);\r\n if (typeof callback === 'function' || callback instanceof Function) {\r\n callback();\r\n }\r\n } else {\r\n ReactToolBar._toolbarMoveOneButton(model, callback);\r\n }\r\n }\r\n\r\n /**\r\n * Восстановить тулбар в исходное состояние.\r\n *\r\n * @method toolbarRestore\r\n * @param {object} model Модель тулбара.\r\n * @param {function} callback Функция обратного вызова.\r\n * @static\r\n */\r\n static toolbarRestore(model, callback) {\r\n for (const group of model.groups) {\r\n for (let buttonIndex = 0; buttonIndex < group.buttons.length; buttonIndex++) {\r\n const button = group.buttons[ buttonIndex ];\r\n button.isCollapsed = false;\r\n if (!group.isCollapsed && button.isMoved) {\r\n button.isMoved = false;\r\n } else if (group.isCollapsed && button.hasOwnProperty('isMoved')) {\r\n group.buttons.splice(buttonIndex, 1);\r\n buttonIndex--;\r\n }\r\n }\r\n }\r\n if (typeof callback === 'function' || callback instanceof Function) {\r\n callback();\r\n }\r\n }\r\n\r\n /**\r\n * Подписаться на события изменения кнопки.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_bindOnButtonChangeEvents\r\n * @param {object} button Кнопка, на события изменения которой подписывается панель действий.\r\n */\r\n _bindOnButtonChangeEvents(button) {\r\n var me = this;\r\n me._buttonChangeEvents.forEach(function(changeEventName) {\r\n button.bind(changeEventName, function() {\r\n me.fire(ReactToolBar.EVENT.CHANGE_STATE, me._model);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Подписаться на события изменения группы.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_bindOnGroupChangeEvents\r\n * @param {object} group Группа, на события изменения которой подписывается панель действий.\r\n */\r\n _bindOnGroupChangeEvents(group) {\r\n var me = this;\r\n me._groupChangeEvents.forEach(function(changeEventName) {\r\n group.bind(changeEventName, function() {\r\n me.fire(ReactToolBar.EVENT.CHANGE_STATE, me._model);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Вызвать событие изменения панели действий.\r\n * Используется для перерисовки панели действий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_dispatchChangeEvent\r\n * @fires WebAccess.components.wrappers.toolBar.ReactToolBar.EVENT#CHANGE_STATE\r\n */\r\n _dispatchChangeEvent() {\r\n this.fire(this['class'].EVENT.CHANGE_STATE, this._model);\r\n }\r\n\r\n /**\r\n * Расширить коллекцию групп.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_extendGroupCollection\r\n */\r\n _extendGroupCollection() {\r\n var me = this;\r\n\r\n me.groups['create'] = me.createGroup.bind(me);\r\n me.groups['isExist'] = function(name) {\r\n return me.isGroupExist.apply(me, [name]);\r\n };\r\n me.groups['addElement'] = this.addGroup.bind(me);\r\n me.groups['deleteElement'] = this.removeGroup.bind(me);\r\n me.groups['clear'] = this.removeAllGroups.bind(me);\r\n me.groups['count'] = function () {\r\n return me._getGroups().length;\r\n };\r\n me.groups['toArray'] = function () {\r\n return me._getGroups.apply(me);\r\n };\r\n }\r\n\r\n /**\r\n * Расширить коллекцию кнопок.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_extendButtonCollection\r\n */\r\n _extendButtonCollection() {\r\n var me = this;\r\n\r\n var currentLength = me.buttons.length;\r\n me.buttons['create'] = me.createButton.bind(me);\r\n me.buttons['remove'] = me.removeButton.bind(me);\r\n me.buttons['isExist'] = function(name) {\r\n return me.isButtonExist.apply(me, [name]);\r\n };\r\n me.buttons['addElement'] = this.addButton.bind(me);\r\n me.buttons['deleteElement'] = this.removeButton.bind(me);\r\n me.buttons['clear'] = this.removeAllButtons.bind(me);\r\n me.buttons['count'] = function () {\r\n return me._getButtons().length;\r\n };\r\n me.buttons['toArray'] = function () {\r\n return me._getButtons.apply(me);\r\n };\r\n me.buttons['getButtonsByActionName'] = function (actionName) {\r\n return me._buttonsByActionName[actionName] || [];\r\n };\r\n me.buttons['getButtonsByEnabledMode'] = function (enabledMode) {\r\n return me._buttonsByEnabledMode[enabledMode] || [];\r\n };\r\n me.buttons['getButtonsEnabledOnAttachmentSelection'] = function () {\r\n return me._buttonsEnabledOnAttachmentSelection;\r\n };\r\n }\r\n\r\n /**\r\n * Получить список всех кнопок на панели действий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_getButtons\r\n * @return {Array.} Список кнопок панели действий.\r\n * @since 5.6.0.1307\r\n */\r\n _getButtons() {\r\n return global.utils.getAssociativeArrayValues(this.buttons).filter(function(button) {\r\n return button.className === 'ReactToolBarButton';\r\n });\r\n }\r\n\r\n /**\r\n * Получить список всех групп на панели действий.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_getGroups\r\n * @return {Array.} Список групп панели действий.\r\n * @since 5.6.0.1307\r\n */\r\n _getGroups() {\r\n return global.utils.getAssociativeArrayValues(this.groups).filter(function(group) {\r\n return group.className === 'ReactToolBarGroup';\r\n });\r\n }\r\n\r\n /**\r\n * Отписаться от событий изменения кнопки.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_unbindFromButtonChangeEvents\r\n * @param {object} button Кнопка, от событий изменения которой отписывается панель действий.\r\n */\r\n _unbindFromButtonChangeEvents(button) {\r\n this._buttonChangeEvents.forEach(function(changeEventName) {\r\n button.unbind(changeEventName);\r\n });\r\n }\r\n\r\n /**\r\n * Отписаться от событий изменения группы.\r\n *\r\n * @private\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#_unbindFromGroupChangeEvents\r\n * @param {object} group Группа, от событий изменения которой отписывается панель действий.\r\n */\r\n _unbindFromGroupChangeEvents(group) {\r\n this._groupChangeEvents.forEach(function(changeEventName) {\r\n group.unbind(changeEventName);\r\n });\r\n }\r\n\r\n /**\r\n * Добавить кнопку на панель действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#addButton\r\n * @param {string} buttonName Имя добавляемой кнопки.\r\n * @param {object} button Добавляемая кнопка.\r\n * @deprecated since 5.6. Use createButton instead.\r\n */\r\n addButton(buttonName, button) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n this.buttons[buttonName] = button;\r\n\r\n // Подписаться на события изменения кнопки\r\n this._bindOnButtonChangeEvents(button);\r\n }\r\n\r\n /**\r\n * Добавить группу на панель действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#addGroup\r\n * @param {string} groupName Имя добавляемой группы.\r\n * @param {object} group Добавляемая группа.\r\n * @deprecated since 5.6. Use createGroup instead.\r\n */\r\n addGroup(groupName, group) {\r\n this._warnAboutDeprecatedMethod(arguments.callee.name);\r\n this.groups[groupName] = group;\r\n\r\n // Подписаться на события изменения группы\r\n this._bindOnGroupChangeEvents(group);\r\n }\r\n\r\n /**\r\n * Создает кнопку на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#createButton\r\n * @param {string} toolGroupName Имя группы кнопок, в которую добавляется кнопка.\r\n * @param {string | object} buttonName Имя создаваемой кнопки или объект {name: \"\", text:\"\", action:\"\", icon:\"\"}\r\n\t * @param {BUTTON} [opt_smallSized] Отображение или скрытие заголовка кнопки. Возможные значения: LARGE, SMALL.\r\n * @throws ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST – указанной группы кнопок не существует;\r\n * @throws ERR_BUTTON_NAME_IS_NOT_SPECIFIED_PROPERLY – неверно указано имя кнопки;\r\n * @throws ERR_BUTTON_WITH_THE_SAME_NAME_ALREADY_EXIST – кнопка с указанным именем уже существует.\r\n * @return {WebAccess.components.wrappers.toolBar.ReactToolBarButton} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBarButton.\r\n */\r\n createButton(toolGroupName, buttonName, opt_smallSized) {\r\n // Найти нужную группу в модели\r\n var groupModel = this._model.groups.find(function(currentGroupModel){\r\n return currentGroupModel.name === toolGroupName;\r\n });\r\n if(!groupModel) {\r\n console.error(L('ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST'), toolGroupName);\r\n }\r\n\r\n // Сформировать модель\r\n var buttonModel;\r\n switch (typeof buttonName) {\r\n case 'string':\r\n buttonModel = {\r\n name: buttonName\r\n };\r\n break;\r\n case 'object':\r\n buttonModel = buttonName;\r\n break;\r\n default:\r\n console.error(L('ERR_BUTTON_NAME_IS_NOT_SPECIFIED_PROPERLY'));\r\n }\r\n\r\n // Дополнить модель\r\n var buttonLabel = L('NEW_BUTTON');\r\n var newButtonModel = {\r\n icon: buttonModel.icon || 'Doc/doc_32.png',\r\n isCaptionVisible: buttonModel.isCaptionVisible || !opt_smallSized,\r\n jsAction: buttonModel.jsAction || buttonModel.action || 'alert(L(\\'WRN_USE_CLICK_OR_BIND_METHODS_TO_SET_THE_ACTION\\'));',\r\n name: buttonModel.name,\r\n caption: buttonModel.text || buttonLabel,\r\n tooltip: buttonModel.toolTip || buttonModel.tooltip || buttonLabel,\r\n isVisible: true,\r\n isEnabled: true\r\n };\r\n\r\n // Проверить, что еще не была создана кнопка с таким именем\r\n if(this.isButtonExist(newButtonModel.name)) {\r\n console.error(L('ERR_BUTTON_WITH_THE_SAME_NAME_ALREADY_EXIST'), name);\r\n }\r\n\r\n // Добавить новую модель кнопки в модель тулбара\r\n groupModel.buttons.push(newButtonModel);\r\n\r\n this._dispatchChangeEvent();\r\n\r\n // Создать кнопку\r\n var button = new WebAccess.components.wrappers.toolBar.ReactToolBarButton(newButtonModel, toolGroupName);\r\n this.buttons[newButtonModel.name] = button;\r\n\r\n // Подписаться на события изменения кнопки\r\n this._bindOnButtonChangeEvents(button);\r\n\r\n return button;\r\n }\r\n\r\n /**\r\n * Создает группу кнопок на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#createGroup\r\n * @param {string | object} toolGroupName Имя группы кнопок или объект {name: \"\", label:\"\", action:\"\", icon:\"\"}\r\n * @param {string} toolGroupNameToAppendAfter Имя существующей группы кнопок, после которой добавится новая группа.\r\n * @throws ERR_GROUP_NAME_IS_NOT_SPECIFIED_PROPERLY Неверно указано имя группы.\r\n * @throws ERR_GROUP_WITH_THE_SAME_NAME_ALREADY_EXIST Группа с указанным именем уже существует.\r\n * @throws ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST Группа, после которой добавляется новая группа, не существует.\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBarGroup} Объект типа ReactToolBarGroup.\r\n */\r\n createGroup(toolGroupName, toolGroupNameToAppendAfter) {\r\n // Сформировать модель\r\n var groupModel;\r\n switch (typeof toolGroupName) {\r\n case 'string':\r\n groupModel = {\r\n name: toolGroupName\r\n };\r\n break;\r\n case 'object':\r\n groupModel = toolGroupName;\r\n break;\r\n default:\r\n console.error(L('ERR_GROUP_NAME_IS_NOT_SPECIFIED_PROPERLY'));\r\n }\r\n\r\n // Дополнить модель\r\n var newGroupModel = {\r\n buttons: groupModel.buttons || [],\r\n icon: groupModel.icon || groupModel.icons || 'Doc/unknown_32.png',\r\n name: groupModel.name,\r\n text: groupModel.text || L('NEW_GROUP')\r\n };\r\n\r\n // Проверим наличие группы с таким именем\r\n if(this.isGroupExist(newGroupModel.name)) {\r\n console.error(L('ERR_GROUP_WITH_THE_SAME_NAME_ALREADY_EXIST'), newGroupModel.name);\r\n }\r\n\r\n // Добавим группу в коллекцию\r\n if(typeof toolGroupNameToAppendAfter === 'string') {\r\n var indexToPaste;\r\n if(toolGroupNameToAppendAfter === '') {\r\n indexToPaste = 0;\r\n } else {\r\n // Если группы с указанным нет - выводим ошибку\r\n if(!this.isGroupExist(toolGroupNameToAppendAfter)) {\r\n console.error(L('ERR_SPECIFIED_BUTTONS_GROUP_DOES_NOT_EXIST'));\r\n }\r\n\r\n // Получаем индекс для вставки\r\n indexToPaste = this._model.groups.findIndex(function(groupModel) {\r\n return groupModel.name === toolGroupNameToAppendAfter;\r\n });\r\n indexToPaste++;\r\n }\r\n\r\n // Вставляем группу\r\n this._model.groups.splice(indexToPaste, 0, newGroupModel);\r\n\r\n } else {\r\n this._model.groups.push(newGroupModel);\r\n }\r\n\r\n this._dispatchChangeEvent();\r\n\r\n var group = new WebAccess.components.wrappers.toolBar.ReactToolBarGroup(newGroupModel);\r\n this.groups[newGroupModel.name] = group;\r\n\r\n // Подписаться на события изменения группы\r\n this._bindOnGroupChangeEvents(group);\r\n\r\n return group;\r\n }\r\n\r\n /**\r\n * Получает кнопку по имени.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getButtonByName\r\n * @param {string} buttonName Имя кнопки.\r\n * @returns {object} Кнопка.\r\n */\r\n getButtonByName(buttonName) {\r\n return this.buttons[buttonName];\r\n }\r\n\r\n /**\r\n * Получает число кнопок на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getButtonsLength\r\n * @returns {number} Число кнопок на панели действий.\r\n */\r\n getButtonsLength() {\r\n return Object.keys(this.buttons).length;\r\n }\r\n\r\n /**\r\n * Получает группу кнопок по имени.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getGroupByName\r\n * @param {string} groupName Имя группы.\r\n * @returns {object} Группа кнопок.\r\n */\r\n getGroupByName(groupName) {\r\n return this.groups[groupName];\r\n }\r\n\r\n /**\r\n * Получает число групп кнопок на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getGroupsLength\r\n * @returns {number} Число групп кнопок на панели действий.\r\n */\r\n getGroupsLength() {\r\n return Object.keys(this.groups).length;\r\n }\r\n\r\n /**\r\n * Получает список кнопок панели действий, которые зависят от указанного прикладного действия.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getButtonsByActionName\r\n * @param {string} actionName Имя прикладного действия.\r\n * @returns {array} Массив кнопок панели действий, которые зависят от указанного прикладного действия.\r\n */\r\n getButtonsByActionName(actionName) {\r\n var buttons = this._buttonsByActionName[actionName.toLowerCase()];\r\n return buttons ? buttons : [];\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список кнопок панели действий по режиму доступности.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getButtonsByEnabledMode\r\n * @param {ACTION_ENABLED_MODE} enabledMode Режим доступности действия.\r\n * @returns {array} Массив кнопок панели действий, для которых установлен соответствующий режим доступности.\r\n */\r\n getButtonsByEnabledMode(enabledMode) {\r\n var buttons = this._buttonsByEnabledMode[enabledMode];\r\n return buttons ? buttons : [];\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает список кнопок панели действий, доступность которых изменяется в зависимости от выбора вложений.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#getButtonsEnabledOnAttachmentSelection\r\n * @returns {array} Массив кнопок панели действий, доступность которых изменяется в зависимости от выбора вложений.\r\n */\r\n getButtonsEnabledOnAttachmentSelection() {\r\n return this._buttonsEnabledOnAttachmentSelection;\r\n }\r\n\r\n /**\r\n * Проверяет наличие кнопки на панели действий по имени.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#isButtonExist\r\n * @param {string} buttonName Имя кнопки.\r\n * @returns {boolean} True - кнопка есть на панели действий, иначе False.\r\n */\r\n isButtonExist(buttonName) {\r\n return this._getButtons().some(function(button) {\r\n return button.name === buttonName;\r\n });\r\n }\r\n\r\n /**\r\n * Проверяет наличие группы кнопок на панели действий по имени.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#isGroupExist\r\n * @param {string} groupName Имя группы.\r\n * @returns {boolean} True - группа есть на панели действий, иначе False.\r\n */\r\n isGroupExist(groupName) {\r\n return this._getGroups().some(function (group) {\r\n return group.name === groupName;\r\n });\r\n }\r\n\r\n /**\r\n * Удаляет все кнопки на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#removeAllButtons\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBar} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBar.\r\n */\r\n removeAllButtons() {\r\n var me = this;\r\n // Удалим все кнопки из всех групп в моделях\r\n me._model.groups.forEach(function(groupModel) {\r\n groupModel.buttons = [];\r\n });\r\n\r\n // Отпишемся от событий изменения всех кнопок\r\n global.utils.getAssociativeArrayValues(me.buttons).forEach(function(button) {\r\n me._unbindFromButtonChangeEvents(button);\r\n });\r\n\r\n // Удалим все кнопки из коллекции\r\n me.buttons = [];\r\n\r\n this._dispatchChangeEvent();\r\n\r\n return me;\r\n }\r\n\r\n /**\r\n * Удаляет все группы кнопок на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#removeAllGroups\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBar} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBar.\r\n */\r\n removeAllGroups() {\r\n var me = this;\r\n\r\n // Отписаться от событий изменения всех групп и кнопок\r\n global.utils.getAssociativeArrayValues(me.groups).forEach(function(group) {\r\n me._unbindFromGroupChangeEvents(group);\r\n });\r\n global.utils.getAssociativeArrayValues(me.buttons).forEach(function(button) {\r\n me._unbindFromButtonChangeEvents(button);\r\n });\r\n\r\n // Удалить группы из модели\r\n me._model.groups = [];\r\n\r\n // Удалить все группы и кнопки из коллекций\r\n me.buttons = [];\r\n me.groups = [];\r\n\r\n this._dispatchChangeEvent();\r\n\r\n return me;\r\n }\r\n\r\n /**\r\n * Удаляет кнопку на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#removeButton\r\n * @param {string} buttonName Имя кнопки.\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBar} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBar.\r\n */\r\n removeButton(buttonName) {\r\n // Найти кнопку в модели тулбара\r\n var isFounded = false;\r\n this._model.groups.some(function(groupModel) {\r\n groupModel.buttons = groupModel.buttons.filter(function (buttonModel) {\r\n if(buttonModel.name === buttonName) {\r\n isFounded = true;\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n return isFounded;\r\n });\r\n\r\n if(isFounded) {\r\n // Отписаться от событий изменения кнопки\r\n this._unbindFromButtonChangeEvents(this.buttons[buttonName]);\r\n\r\n // Удалить кнопку из коллекции кнопок\r\n delete this.buttons[buttonName];\r\n\r\n this._dispatchChangeEvent();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Удаляет группу кнопок на панели действий.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ReactToolBar#removeGroup\r\n * @param {string} groupName Имя удаляемой группы.\r\n * @returns {WebAccess.components.wrappers.toolBar.ReactToolBar} Объект типа WebAccess.components.wrappers.toolBar.ReactToolBar.\r\n */\r\n removeGroup(groupName) {\r\n if(this.isGroupExist(groupName)) {\r\n // Удалить группу в модели\r\n var index = this._model.groups.findIndex(function(groupModel) {\r\n return groupModel.name === groupName;\r\n });\r\n this._model.groups = this.model.groups.splice(index, 1);\r\n\r\n // Отписаться от событий изменения группы\r\n this._unbindFromGroupChangeEvents(this.groups[groupName]);\r\n\r\n // Удалить группу из коллекции\r\n delete this.groups[groupName];\r\n\r\n this._dispatchChangeEvent();\r\n }\r\n\r\n return this;\r\n }\r\n }\r\n \r\n /*, {\r\n EVENT: {\r\n // Событие, срабатывающее при изменении модели панели действий.\r\n CHANGE_STATE: 'changeState'\r\n }\r\n });*/\r\n\r\n global.components.wrappers.toolBar.ReactToolBar = ReactToolBar;\r\n\r\n})(window.WebAccess);","'use strict';\r\n\r\n(function (global) {\r\n const toolbarContentsSelector = '.toolbar_holder';\r\n\r\n /**\r\n * Класс-обертка для панели действий.\r\n * @class WebAccess.components.wrappers.toolBar.ToolBar\r\n * @since 5.5.0.9000\r\n */\r\n var ToolBar = BaseObject.extend({\r\n\r\n /**\r\n * Конструктор.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#init\r\n * @override\r\n */\r\n init: function () {\r\n this._super();\r\n\r\n // Подписаться на событие изменения размера окна для изменения размера панели действий.\r\n $(window).on('resizeEnd', () => this._resizeToolbar());\r\n\r\n // И нужно вызвать событие ресайза, чтобы панель действий подстроилась под размер окна.\r\n window.createResizeEndEvent($(window));\r\n\r\n // При нажатии вне области развернутой группы нужно скрыть ее\r\n $(document).mouseup((event) => {\r\n const groupContainer = $('.addedHiddenDiv:visible');\r\n if (!groupContainer.has(event.target).length) {\r\n groupContainer.hide();\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Список кнопок, уменьшенных при сжатии кнопок тулбара под размер доступнрого места.\r\n *\r\n * @property WebAccess.components.wrappers.toolBar.ToolBar#_shrinkedButtonsAfterResize\r\n */\r\n _shrinkedButtonsAfterResize: [],\r\n\r\n /**\r\n * Список кнопок панели действий.\r\n *\r\n * @property WebAccess.components.wrappers.toolBar.ToolBar#buttons\r\n */\r\n buttons: {},\r\n\r\n /**\r\n * Список групп кнопок панели действий.\r\n *\r\n * @property WebAccess.components.wrappers.toolBar.ToolBar#groups\r\n */\r\n groups: {},\r\n\r\n /**\r\n * Развернуть все разворачиваемые группы и кнопки тулбара.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#_restoreToolbar\r\n * @private\r\n * @since 5.6.0.9070\r\n */\r\n _restoreToolbar() {\r\n for (let button of this._shrinkedButtonsAfterResize) {\r\n button.showCaption();\r\n }\r\n this._shrinkedButtonsAfterResize = [];\r\n },\r\n\r\n /**\r\n * Получить кнопку, которая может быть сокращена до иконки, из группы тулбара с наиболее низким приоритетом (в\r\n * которой ещё остались такие кнопки).\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#__getNextButtonWithCaption\r\n * @private\r\n * @return {WebAccess.components.wrappers.toolBar.ToolBarButton || null} Кнопка тулбара, которая может быть\r\n * сокращена до иконки, или NULL, если таких кнопок не осталось.\r\n * @since 5.6.0.9070\r\n * @summary Получить кнопку с отображаемым названием.\r\n */\r\n _getNextButtonWithCaption() {\r\n const toolbarGroups = this.groups.toArray();\r\n let priority = Infinity;\r\n let buttonWithCaptionInLowPriorityGroup = null;\r\n for (let group of toolbarGroups) {\r\n const groupPriority = group.priority || 0;\r\n if (groupPriority < priority) {\r\n const toolbarButtons = group.getButtons().toArray();\r\n const buttonWithCaption = toolbarButtons.find((button) => button.isCaptionVisible());\r\n if (buttonWithCaption) {\r\n buttonWithCaptionInLowPriorityGroup = buttonWithCaption;\r\n priority = groupPriority;\r\n }\r\n }\r\n }\r\n return buttonWithCaptionInLowPriorityGroup;\r\n },\r\n\r\n /**\r\n * Признак скрытого тулбара.\r\n *\r\n * @method getIsHidden\r\n * @return {boolean} True - тулбар скрыт, иначе False.\r\n */\r\n getIsHidden() {\r\n const jToolbar = $(toolbarContentsSelector);\r\n return !jToolbar.is(':visible');\r\n },\r\n\r\n /**\r\n * Вписать панель действий по размеру окна.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#resizeToolbar\r\n * @since 5.6.0.0000\r\n */\r\n resizeToolbar() {\r\n // TODO Избавиться от приватного метода\r\n this._resizeToolbar();\r\n },\r\n\r\n /**\r\n * Вписать панель действий по размеру окна.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#_resizeToolbar\r\n * @private\r\n * @since 5.6.0.1300\r\n */\r\n _resizeToolbar() {\r\n $.when(WA.ToolBarInit).done(() => {\r\n const jToolbarContents = $(toolbarContentsSelector);\r\n const width = this._getAvailableWidth();\r\n\r\n // Спрячем содержимое тулбара пока идут трансформации, чтоб не дёргался.\r\n jToolbarContents.hide();\r\n\r\n // Развернём тулбар до его изначального состояния (до такого, каким он пришёл с сервера).\r\n this._restoreToolbar();\r\n\r\n while (!this._canFitToWidth(width)) {\r\n const buttonWithCaption = this._getNextButtonWithCaption();\r\n // Если больше не нашлось кнопки с отображаемым названием.\r\n if (!buttonWithCaption) {\r\n break;\r\n }\r\n this._shrinkedButtonsAfterResize.push(buttonWithCaption);\r\n buttonWithCaption.hideCaption();\r\n }\r\n\r\n jToolbarContents.show();\r\n });\r\n },\r\n\r\n /**\r\n * Узнать, вмещаются ли элементы тулбара в контейнер тулбара.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#_canFitToWidth\r\n * @private\r\n * @return {boolean} TRUE - если элементы тулбара вмещаются в контейнер для тулбара, иначе - FALSE.\r\n * @since 5.6.0.9075\r\n */\r\n _canFitToWidth(width) {\r\n const toolbarWidth = $(toolbarContentsSelector).width();\r\n return width > toolbarWidth;\r\n },\r\n\r\n /**\r\n * Получить ширину списка объектов.\r\n *\r\n * @method WebAccess.components.wrappers.toolBar.ToolBar#_getAvailableWidth\r\n * @private\r\n * @return {number} Ширина списка объектов в px.\r\n * @since 5.6.0.9075\r\n */\r\n _getAvailableWidth() {\r\n let availableWidth = $(window).width();\r\n\r\n if (WA.getLocation() === 'explorer') {\r\n // В левой колонке дерево папок.\r\n const jLeftColumn = $('#left_column');\r\n if (jLeftColumn.length) {\r\n availableWidth -= jLeftColumn.width();\r\n }\r\n } else {\r\n const jAttachments = $('.attachments_td');\r\n if (jAttachments.length) {\r\n availableWidth -= jAttachments.width();\r\n }\r\n }\r\n\r\n return availableWidth - 10;\r\n },\r\n });\r\n\r\n global.ToolBar = ToolBar;\r\n\r\n})(window.WA.components.wrappers.toolBar);\r\n","\"use strict\";\r\n\r\n/**\r\n* Кнопка на панели \"Создать\".\r\n*\r\n* @class WebAccess.components.ActionButton\r\n* @extends BaseObject\r\n* @property {object} _model Модель кнопки панели \"Создать\"\r\n*/\r\n\r\n(function (global) {\r\n var ActionButton = BaseObject.extend({\r\n\r\n _model: {},\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Конструктор\r\n * @param {object} model Модель кнопки на панели \"Создать\"\r\n * @method WebAccess.components.ActionButton#init\r\n */\r\n init: function (model) {\r\n this._model = model;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак скрытия кнопки на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#isHidden\r\n * @return {boolean} True, если кнопка скрыта, иначе False.\r\n */\r\n isHidden: function () {\r\n return this._model.hidden;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Признак отображения кнопки на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#isEnabled\r\n * @return {boolean} True, если кнопка отображается, иначе False.\r\n */\r\n isEnabled: function () {\r\n return !this._model.disabled;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает скрытую кнопку на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#show\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n *\r\n * @example\r\n * WebAccess.current.createPanel.buttons['CrtDocTmpl'].show();\r\n */\r\n show: function () {\r\n this._model.hidden = false;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Скрывает кнопку на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#hide\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n */\r\n hide: function() {\r\n this._model.hidden = true;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку на панели \"Создать\" недоступной.\r\n * Кнопка становится полупрозрачной и не реагирует на события.\r\n *\r\n * @method WebAccess.components.ActionButton#disable\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n */\r\n disable: function() {\r\n this._model.disabled = true;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает кнопку на панели \"Создать\" доступной.\r\n *\r\n * @method WebAccess.components.ActionButton#enable\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n */\r\n enable: function () {\r\n this._model.disabled = false;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Добавляет подпись к кнопке на панели \"Создать\".\r\n *\r\n * @param {string} text Текст подписи\r\n * @method WebAccess.components.ActionButton#setLabel\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n */\r\n setLabel: function (text) {\r\n this._model.text = text;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает текст подписи к кнопке на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#getLabel\r\n * @return {string} Текст подписи к кнопке.\r\n */\r\n getLabel: function () {\r\n return this._model.text;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Устанавливает всплывающую подсказку к кнопке на панели \"Создать\".\r\n *\r\n * @param {string} text Текст всплывающей подсказки\r\n * @method WebAccess.components.ActionButton#setTooltip\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n * @since 5.0.0.4005\r\n */\r\n setTooltip: function (text) {\r\n this._model.tooltip = text;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает текст всплывающей подсказки к кнопке на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#getTooltip\r\n * @return {string} Текст всплывающей подсказки.\r\n * @since 5.0.0.4005\r\n */\r\n getTooltip: function () {\r\n return this._model.tooltip;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает иконку для кнопки на панели \"Создать\".\r\n *\r\n * PNG-иконку необходимо разместить в папке App_Sprites корневой папки веб-сайта и после этого опубликовать веб-модуль.\r\n\t * Или можно использовать название SVG-иконки, расположенной в папке svg/icon.\r\n *\r\n\t * @method WebAccess.components.ActionButton#setIcon\r\n * @param {string} path Путь к PNG-иконке или название SVG-иконки\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n\t *\r\n\t * @example\r\n * WebAccess.current.createPanel.buttons['CrtDocTmpl'].setIcon('SidebarAndExtensions/EDocumentSearch_24.png');\r\n * или\r\n * WebAccess.current.createPanel.buttons['CrtDocTmpl'].setIcon('task-32');\r\n */\r\n setIcon: function (path) {\r\n this._model.icon = path;\r\n this._dispatchChangeEvent();\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает имя иконки для кнопки на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#getIcon\r\n * @return {string} Имя иконки.\r\n */\r\n getIcon: function() {\r\n return this._model.icon;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Назначает функцию, выполняемую при нажатии на кнопку на панели \"Создать\".\r\n *\r\n * @method WebAccess.components.ActionButton#click\r\n\t * @param {string} callback Функция, выполняемая при нажатии на кнопку\r\n * @return {WebAccess.components.ActionButton} Объект типа ActionButton.\r\n */\r\n click: function(callback) {\r\n var instance = this;\r\n if (callback) {\r\n this._model.jsaction = callback;\r\n this._dispatchChangeEvent();\r\n } else {\r\n // TODO: сэмулировать клик каким-то образом.\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Вызвать событие, которое оповещает подписчиков об изменениях в модели кнопки.\r\n *\r\n * // Вызванное событие повлечет за собой рендер ExplorerHeader с помощью react (ВД 5.5.0).\r\n */\r\n _dispatchChangeEvent: function() {\r\n this.fire(this['class'].EVENT.CHANGE_STATE);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n }, {\r\n /**\r\n * События.\r\n */\r\n EVENT: {\r\n /**\r\n * Срабатывает при изменении свойств кнопки на панели \"Создать\".\r\n */\r\n CHANGE_STATE: 'changeState'\r\n }\r\n });\r\n\r\n global.ActionButton = ActionButton;\r\n\r\n})(window.WebAccess.components);\r\n","'use strict';\r\n\r\n/**\r\n * Объект закладки карточки.\r\n *\r\n * @class WebAccess.components.CardTab\r\n * @extends BaseObject\r\n * @property {string} _containerID ИД элемента страницы, в который будет помещен сгенерированный HTML-элемент закладки карточки.\r\n * @property {object} _model Модель закладки карточки.\r\n * @property {object} [_childComponents] Массив объектов закладки карточки, которыми можно управлять через клиентский API веб-доступа.\r\n * @property {boolean} _firstRender\r\n * @since 5.6.0\r\n */\r\n\r\n(function (global) {\r\n var CardTab = BaseObject.extend({\r\n _containerId: '',\r\n _model: {},\r\n _childComponents: [],\r\n _firstRender: true,\r\n\r\n /**\r\n * Конструктор\r\n * @method WebAccess.components.CardTab#init\r\n * @param {string} containerId ИД элемента страницы, в который будет помещен сгенерированный HTML-элемент закладки карточки.\r\n * @param {object} model Модель закладки карточки.\r\n * @param {array} childComponents Массив объектов закладки карточки, которыми можно управлять через клиентский API веб-доступа.\r\n */\r\n init(containerId, model, childComponents) {\r\n this._containerId = containerId;\r\n this._model = model;\r\n this._extendModel();\r\n this.bindChildEvents(childComponents);\r\n\r\n $('html')\r\n .on(PAGE_EVENTS.TOGGLE_PERIOD, () => {\r\n this.updateHistoryTable({\r\n shouldResetScroll: true,\r\n forceRerender: true\r\n });\r\n })\r\n .on(PAGE_EVENTS.TAB_MODEL_CHANGE, () => {\r\n this._render();\r\n });\r\n\r\n this._render();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подписывает на события дочерних компонент.\r\n *\r\n * @method WebAccess.components.CardTab#bindChildEvents\r\n * @param {object} childComponents Список дочерних компонент.\r\n * @return {WebAccess.components.CardTab} Текущая вкладка.\r\n */\r\n bindChildEvents(childComponents) {\r\n this._childComponents = childComponents;\r\n if (typeof this._childComponents === 'object') {\r\n this._childComponents.forEach((component) => {\r\n const componentEventChangeState = component[ 'class' ].EVENT.CHANGE_STATE || component.constructor.EVENT.CHANGE_STATE;\r\n component.bind(componentEventChangeState, () => {\r\n this._render();\r\n });\r\n });\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Отписывает от событий дочерних компонент.\r\n *\r\n * @method WebAccess.components.CardTab#unbindChildEvents\r\n */\r\n unbindChildEvents() {\r\n if (typeof this._childComponents === 'object') {\r\n this._childComponents.forEach((component) => {\r\n const componentEventChangeState = component[ 'class' ].EVENT.CHANGE_STATE || component.constructor.EVENT.CHANGE_STATE;\r\n component.unbind(componentEventChangeState);\r\n });\r\n }\r\n this._childComponents = [];\r\n return this;\r\n },\r\n\r\n /**\r\n * Обновляет закладку карточки.\r\n *\r\n * @method WebAccess.components.CardTab#updateModel\r\n * @param {object} model Модель закладки, которую нужно обновить.\r\n */\r\n updateModel(model) {\r\n // Если юзер ушёл с закладки \"Карточка\" - удаляем объект закладки \"Карточка\"\r\n // и анбайндим проверку на пользовательский ввод при попытке закрытия окна\r\n if (this._model.type !== model.type && this.mainTab) {\r\n this.mainTab.unbindEvents();\r\n this.mainTab = undefined;\r\n }\r\n this._model = model;\r\n this._extendModel();\r\n this._render(true);\r\n },\r\n\r\n /**\r\n * Сменить закладку (и обновить модель и КОМ)\r\n *\r\n * @method WebAccess.components.CardTab#_requestModelData\r\n * @private\r\n * @param {string} requestUrl Веб-сервис, который нужно вызвать для получения модели.\r\n * @param {object} requestParams Параметры запроса.\r\n */\r\n _requestModelData(requestUrl, requestParams) {\r\n WA.SRV.call(requestUrl, requestParams).done((res) => {\r\n this.updateModel(JSON.parse(res));\r\n });\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновление таблицы с историей работы с объектом на вкладке История.\r\n *\r\n * @method WebAccess.components.CardTab#updateHistoryTable\r\n * @param {object} params Параметры запроса к веб-сервису.\r\n */\r\n updateHistoryTable: function (params) {\r\n (function (me) {\r\n var historyModel = me._model.content.data;\r\n if (historyModel.isAllRowsDisplayed && !params.forceRerender) {\r\n me.sortHistoryTable(params, historyModel);\r\n } else {\r\n var requestParams = {\r\n id: WA.CR.ID,\r\n type: WA.CR.Type,\r\n referenceName: WA.CR.ReferenceCode,\r\n sortingColumnId: historyModel.sorting.columnId,\r\n sortingDirection: historyModel.sorting.direction,\r\n rowsCount: 100,\r\n skipRows: 0\r\n };\r\n if (params) {\r\n $.extend(requestParams, params);\r\n if (params.shouldResetScroll) {\r\n me._resetScroll();\r\n }\r\n }\r\n me._requestModelData('/api/CardForm.asmx/GetHistoryTab', requestParams);\r\n }\r\n })(this);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сортирует таблицу с историей работы с объектом на вкладке История.\r\n *\r\n * @method WebAccess.components.CardTab#sortHistoryTable\r\n * @param {object} params Параметры сортировки.\r\n * @param {object} historyModel Модель historyModel.\r\n */\r\n sortHistoryTable: function (params, historyModel) {\r\n var sorting = {\r\n columnId: params.sortingColumnId,\r\n direction: params.sortingDirection\r\n };\r\n var columnType = historyModel.tableColumns[ sorting.columnId ].columnType;\r\n historyModel.tableRows.sort(function (leader, follower) {\r\n var first = leader[ sorting.columnId ].join(' ');\r\n var second = follower[ sorting.columnId ].join(' ');\r\n switch (columnType) {\r\n case COLUMN_TYPE.DATE:\r\n const transformDatetime = (datetime) => {\r\n datetime = datetime.split(' ');\r\n\r\n // Получить дату\r\n let dateParts;\r\n let hoursAndMinutes;\r\n if (datetime[ 0 ].includes('.')) {\r\n // Русский формат\r\n dateParts = datetime[ 0 ].split('.').reverse();\r\n hoursAndMinutes = datetime[ 1 ].split(':');\r\n } else {\r\n // Американский формат\r\n dateParts = datetime[ 0 ].split('/');\r\n dateParts.unshift(dateParts.pop());\r\n\r\n // Преобразуем время\r\n hoursAndMinutes = datetime[ 1 ].split(':');\r\n if (datetime[ 2 ].toLowerCase() === 'pm') {\r\n // += не будет работать, т.к. в массиве строки и это примется за конкатенацию\r\n hoursAndMinutes[ 0 ] = +hoursAndMinutes[ 0 ] + 12;\r\n }\r\n }\r\n\r\n dateParts = [ ...dateParts, ...hoursAndMinutes ];\r\n return new Date(...dateParts);\r\n };\r\n first = transformDatetime(first);\r\n second = transformDatetime(second);\r\n break;\r\n case COLUMN_TYPE.INTEGER:\r\n first = parseInt(first);\r\n second = parseInt(second);\r\n break;\r\n }\r\n if (first > second || (columnType === COLUMN_TYPE.INTEGER && isNaN(second))) {\r\n return sorting.direction;\r\n } else if (first < second || (columnType === COLUMN_TYPE.INTEGER && isNaN(first))) {\r\n return -sorting.direction;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n historyModel.sorting = sorting;\r\n this._render();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает модель закладки \"Состояние\" в карточках задач и заданий.\r\n *\r\n * @method WebAccess.components.CardTab#getFullCustomWorkState\r\n * @return {object} Модель закладки \"Состояние\".\r\n */\r\n getFullCustomWorkState: function () {\r\n this._requestModelData('/api/CardForm.asmx/GetFullCustomWorkStateTab', {\r\n id: WA.CR.ID,\r\n type: WA.CR.Type\r\n });\r\n },\r\n\r\n /**\r\n * Включает/выключает панель фильтрации (на вкладке \"Состояние\" карточки ЗЗУ).\r\n *\r\n * @method WebAccess.components.CardTab#toggleStateTreeFilterPanel\r\n * @since 5.6.1\r\n */\r\n toggleStateTreeFilterPanel() {\r\n // Получить состояние кнопки\r\n const toogleFilterPanelButton = WA.CR.toolBar.buttons.ToggleStateTreeFilterPanel;\r\n if (toogleFilterPanelButton) {\r\n const isFilterPanelVisible = !toogleFilterPanelButton.isSelected();\r\n WA.SRV.call('Session.asmx/SetUserProfileSettings', {\r\n ParamName: 'IsStateTreeFilterPanelVisible',\r\n ParamValue: isFilterPanelVisible,\r\n });\r\n\r\n if (isFilterPanelVisible) {\r\n toogleFilterPanelButton.select();\r\n } else {\r\n this._model.extended.applyFilter(STATETREE_FILTER.ALL);\r\n toogleFilterPanelButton.unSelect();\r\n }\r\n\r\n this._model.content.data.isFilterPanelVisible = isFilterPanelVisible;\r\n this._render();\r\n }\r\n },\r\n\r\n /**\r\n * Сбросить скролл (перемотать наверх) - при пересортировке и при сбросе/назначении фильтров.\r\n *\r\n * @method WebAccess.components.CardTab#_resetScroll\r\n * @private\r\n */\r\n _resetScroll() {\r\n $('#' + this._containerId).animate({\r\n scrollTop: 0\r\n }, 100);\r\n },\r\n\r\n /**\r\n * Расширить модель CardTab добавлением дополнительных функций и атрибутов.\r\n *\r\n * @method WebAccess.components.CardTab#_extendModel\r\n * @private\r\n */\r\n _extendModel() {\r\n if (this._model.toolbar) {\r\n this._model.toolbar.extended = {\r\n restore: () => {\r\n WA.CMP.wrappers.toolBar.ReactToolBar.toolbarRestore(\r\n this._model.toolbar,\r\n this._render.bind(this),\r\n );\r\n },\r\n collapseOneButton: () => {\r\n WA.CMP.wrappers.toolBar.ReactToolBar.toolbarCollapseOneButton(\r\n this._model.toolbar,\r\n this._render.bind(this),\r\n );\r\n },\r\n };\r\n }\r\n\r\n const isIe = WA.ENV.browser.name === 'IE';\r\n\r\n switch (this._model.type) {\r\n case TAB_TYPE.CUSTOM_WORK_STATE:\r\n const stateTab = new WebAccess.components.CardTabStateTab(this._model.content.data.jobStates);\r\n this._model.content.data.jobStates = stateTab.getStateTree();\r\n this._model.extended = stateTab.getExtendedProperties();\r\n this._model.extended.activeFilter = 0;\r\n this._model.extended.applyFilter = (filter) => {\r\n stateTab.applyFilter(this._model.extended.activeFilter = filter);\r\n };\r\n break;\r\n\r\n case TAB_TYPE.HISTORY:\r\n this._model.extended = {\r\n isIe: isIe,\r\n update: (requestParams) => {\r\n this.updateHistoryTable(requestParams);\r\n },\r\n };\r\n break;\r\n\r\n case TAB_TYPE.JOB_CARD:\r\n case TAB_TYPE.TASK_CARD:\r\n if (this.mainTab === undefined) {\r\n // Создаем экземпляр класса основной закладки карточки, содержащего всю специфичную для этой закладки логику.\r\n this.mainTab = new WebAccess.components.CardTabMainTab(this._model.content.data, this._model.type);\r\n } else {\r\n // Обновляем модель класса основной закладки карточки.\r\n this.mainTab.updateModel(this._model.content.data);\r\n }\r\n let processedContent = this.mainTab.getContent();\r\n this._model.content.data.main = processedContent.main;\r\n this._model.content.data.aside = processedContent.aside;\r\n this._model.extended = this.mainTab.getExtendedProperties();\r\n this._model.beforeRender = () => Core.tasks.unbindButtonsEnabling();\r\n this._model.afterRender = () => Core.tasks.bindButtonsEnabling();\r\n break;\r\n }\r\n },\r\n\r\n /**\r\n * Отрендерить компоненту CardTab с помощью react.\r\n * @private\r\n * @param {boolean} [isNewModel = false] TRUE если обновилась закладка, иначе - FALSE.\r\n */\r\n _render(isNewModel = false) {\r\n let reactRender = () => {\r\n if (isNewModel) {\r\n this.fire(PAGE_EVENTS.TAB_ON_BEFORE_RENDER_NEW_MODEL, this._model);\r\n }\r\n ReactDOM.render(\r\n React.createElement(Component.CardTab, this._model),\r\n document.getElementById(this._containerId),\r\n isNewModel ? () => $('html').trigger(PAGE_EVENTS.TAB_ON_AFTER_RENDER_NEW_MODEL) : null\r\n );\r\n };\r\n if (this._firstRender) {\r\n WA.ready(() => {\r\n if (this._firstRender) {\r\n reactRender();\r\n this._firstRender = false;\r\n }\r\n });\r\n } else {\r\n reactRender();\r\n }\r\n },\r\n\r\n });\r\n\r\n global.CardTab = CardTab;\r\n\r\n})(window.WebAccess.components);\r\n","'use strict';\r\n\r\n/**\r\n * Объект закладки \"Карточка\" в карточке объекта.\r\n *\r\n * @class WebAccess.components.CardTabMainTab\r\n *\r\n * @property {number} type Тип закладки карточки.\r\n * @property {object} content Модель HTML-содержимого закладки \"Карточка\".\r\n * @property {string} content.main HTML-содержимое контейнера с формой карточки и областью переписки.\r\n * @property {string} content.aside HTML-содержимое контейнера с областью вложений.\r\n * @property {bool} contentJustReceivedFromServer Признак того, что данные только что получены с сервера. Позволяет определить необходимость инициализации скриптов.\r\n * @property {string} serializedTabData Сериализованные поля формы и область вложений карточки. Позволяют проверить, есть ли пользовательский ввод и нужно ли предупреждать о потере пользовательских данных при закрытии закладки.\r\n * @property {object} scriptsEvalAfterRender Скрипты, которые вызываются после генерации React-компоненты.\r\n * @property {array} scriptsEvalAfterRender.pending Массив со скриптами, ожидающими выполнения. //TODO: переделать массивы со скриптами на ES6-коллекцию new Set()\r\n * @property {array} scriptsEvalAfterRender.evaluated Массив с уже выполненными скриптами.\r\n * @property {array} scriptsAlwaysEvalAfterRender Массив со скриптами, которые вызываются каждый раз при обновлении модели после генерации React-компоненты.\r\n * @since 5.6.0\r\n */\r\n\r\n// На закладке карточки каждый скрипт, приходящий с разметкой с сервера, должен вызываться только один раз во избежание многократных биндов и перерендеров.\r\n// Сначала скрипты попадают в scriptsEvalAfterRender.pending, после завершения рендера они вызываются и переносятся в scriptsEvalAfterRender.evaluated.\r\n// При каждом пришествии модели с HTML-разметкой с сервера скрипты из этой разметки заносятся в scriptsEvalAfterRender.pending, только если таких же скриптов нет в scriptsEvalAfterRender.evaluated.\r\n\r\n\r\nwindow.WebAccess.components.CardTabMainTab = class {\r\n\r\n /**\r\n * Создаёт объект закладки \"Карточка\" в карточке объекта.\r\n *\r\n * @param {object} content Модель HTML-содержимого закладки \"Карточка\".\r\n * @param {string} content.main HTML-содержимое контейнера с формой карточки и областью переписки.\r\n * @param {string} content.aside HTML-содержимое контейнера с областью вложений.\r\n * @param {number} type Тип закладки карточки.\r\n */\r\n constructor(content, type) {\r\n this.type = type;\r\n // Селектор содержимого.\r\n const containerSelector = 'form.master';\r\n this.scriptsEvalAfterRender = [\r\n 'InitContentListToolbox();', // TODO: для уведомления это не нужно, надо как-то различать\r\n 'window.InitAttachmentsResize();',\r\n ];\r\n this.scriptsAlwaysEvalAfterRender = [\r\n () => {\r\n // ToDo: поле ввода текста показывается не сразу, поэтому запускаем по таймауту.\r\n setTimeout(window.InitSavedTextResize, 0);\r\n },\r\n window.ShowOnlyCurrentRelatedTasks,\r\n window.ScrollTreeToCurrentJob,\r\n () => {\r\n $('.TaskTree').removeClass('TaskTree__hidden');\r\n },\r\n () => window.InitTooltips(),\r\n () => {\r\n const jAttachments = $('#Attachments_AttachmentsList_list');\r\n EntityListInit(jAttachments, true, false);\r\n\r\n // Остановим всплытие события к родительскому элементу - списку объектов, \r\n // т.к. по факту изменение списка не происходит.\r\n $('#Attachments_AttachmentsList_chkAll').bind('change', event => event.stopPropagation());\r\n\r\n // Сформировать список вложений. Почему сделано на jQuery:\r\n // Если присылать список вложений с бэка, то список заморозится до переключения вкладки, т.к.\r\n // функция инициализации CardTabMainTab отрабатывает только при переключении и обновлении вкладок.\r\n const jAttachmentItems = jAttachments.find('.object-list-item');\r\n const values = jAttachmentItems.toArray().map(attachmentItemNode => {\r\n const jAttachmentItem = $(attachmentItemNode);\r\n return {\r\n CompCode: jAttachmentItem.attr('compcode'),\r\n ID: jAttachmentItem.attr('id'),\r\n Kind: jAttachmentItem.attr('kind'),\r\n };\r\n });\r\n\r\n ListRequisite(\"Attachments_AttachmentsList\").Init({\r\n ContentKind: \"ANY\",\r\n Values: JSON.stringify(values),\r\n OnLoad: \"this.InitAttachments(WA.CR.ID, WA.CR.Type === OBJECT_TYPE.TASK ? 'TASK' : 'JOB');\",\r\n ReadOnly: $('#Attachments_AttachmentsList_OuterPanel').hasClass('readonly'),\r\n IsList: true,\r\n ShowScrollBar: true,\r\n EnableSameRecords: true,\r\n NeedShowPasteAndDeleteLink: true,\r\n IsShowActions: false,\r\n RefCode: null\r\n });\r\n window.UpdateCopyPasteIcons(jAttachments);\r\n },\r\n ];\r\n switch (this.type) {\r\n case TAB_TYPE.TASK_CARD:\r\n this.scriptsAlwaysEvalAfterRender.push(...[\r\n () => {\r\n Core.tasks.initSelectStandardRouteButton();\r\n Core.customWorks.bindButtonsEnabling('textarea.Card_Task_EditText');\r\n Core.customWorks.bindButtonsEnabling('input#CardContrrolSubject');\r\n WA.CR.objectList = new WebAccess.components.wrappers.objectList.FolderList(containerSelector);\r\n new Core.objectList.dragging().initEvents();\r\n },\r\n ]);\r\n this.scriptsEvalAfterRender.push(...[\r\n 'Task_SetFocusToEditText()',\r\n ]);\r\n break;\r\n case TAB_TYPE.JOB_CARD:\r\n this.scriptsAlwaysEvalAfterRender.push(...[\r\n () => {\r\n Core.customWorks.bindButtonsEnabling('textarea.Job_Edit_Text_Area_Control');\r\n WA.CR.objectList = new WebAccess.components.wrappers.objectList.FolderList(containerSelector);\r\n new Core.objectList.dragging().initEvents();\r\n },\r\n ]);\r\n this.scriptsEvalAfterRender.push(...[\r\n 'Job_SetFocusToEditText()',\r\n ]);\r\n }\r\n this.updateModel(content);\r\n\r\n // Байндим проверку на пользовательские изменения при попытке закрытия окна или переключения вкладки\r\n WA.CR.window.bind('beforeClose', () => {\r\n if (this.isModifiedByUser()) {\r\n return L('DATA_DIDNT_SAVE');\r\n }\r\n return false;\r\n });\r\n $('html').bind(PAGE_EVENTS.ON_BEFORE_TAB_CHANGE, (event) => {\r\n event.currentTarget.isModifiedByUser = this.isModifiedByUser();\r\n });\r\n $(window).off('resize.tab').on('resize.tab', () => {\r\n window.InitSavedTextResize();\r\n });\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Обновляет закладку \"Карточка\", скрипты, сериализует поля формы.\r\n * @method WebAccess.components.CardTabMainTab#updateModel\r\n * @param {object} content Модель HTML-содержимого закладки «Карточка».\r\n * @param {string} content.main HTML-содержимое контейнера с формой карточки и областью переписки.\r\n * @param {string} content.aside HTML-содержимое контейнера с областью вложений.\r\n */\r\n updateModel(content) {\r\n this.contentJustReceivedFromServer = true;\r\n\r\n // Декодировать html, получить инициализационные скрипты и удалить их из разметки\r\n this.content = {\r\n main: this._extractScriptsFromHtml(content.main)\r\n // Заменить форму на div, чтобы не было проблем при отправке формы на сервер\r\n .replace('
    ', 'div>'),\r\n aside: this._extractScriptsFromHtml(content.aside),\r\n };\r\n\r\n this.serializedTabData = this._serializeCardForm(this.content.main) + this._serializeAttachments(this.content.aside);\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает модель HTML-содержимого закладки «Карточка».\r\n * @method WebAccess.components.CardTabMainTab#getContent\r\n * @returns {object} Модель HTML-содержимого закладки «Карточка».\r\n */\r\n getContent() {\r\n return this.content;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает функции и атрибуты для расширения модели родительской компоненты для прокидывания в React-компоненту.\r\n * @comment Inna: чем можно заменить \"прокидывания\"? \"добавления\"?\r\n * @method WebAccess.components.CardTabMainTab#getExtendedProperties\r\n * @returns {object} Объект, который будет присвоен атрибуту extended родительской компоненты.\r\n */\r\n getExtendedProperties() {\r\n let extendedProps = {\r\n initCustomWork: () => {\r\n this._initCustomWork(this);\r\n },\r\n };\r\n if (this.type === TAB_TYPE.JOB_CARD) {\r\n extendedProps.initTooltip = (element) => {\r\n InitAdditionalInfoTooltip($(element));\r\n };\r\n }\r\n return extendedProps;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удалить.\r\n *\r\n * @method WebAccess.components.CardTabMainTab#unbindEvents\r\n */\r\n unbindEvents() {\r\n WA.CR.window.unbind('beforeClose');\r\n $('html')\r\n .unbind(PAGE_EVENTS.ON_BEFORE_TAB_CHANGE)\r\n .get(0).isModifiedByUser = false;\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет, была ли информация изменена пользователем.\r\n * @method WebAccess.components.CardTabMainTab#isModifiedByUser\r\n * @private\r\n * @returns {boolean} TRUE - если информация модифицирована пользователем, иначе - FALSE.\r\n */\r\n isModifiedByUser() {\r\n let currentSerializedTabData = this._serializeCardForm() + this._serializeAttachments();\r\n return (this.serializedTabData !== currentSerializedTabData);\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализировать скрипты ЗЗУ.\r\n * @method WebAccess.components.CardTabMainTab#_initCustomWork\r\n * @private\r\n * @param {object} mainTab Объект CardTabMainTab.\r\n */\r\n _initCustomWork(mainTab) {\r\n if (mainTab.contentJustReceivedFromServer) {\r\n while (mainTab.scriptsEvalAfterRender.length) {\r\n const fn = mainTab.scriptsEvalAfterRender.shift();\r\n Function(fn).call();\r\n }\r\n\r\n mainTab.contentJustReceivedFromServer = false;\r\n for (const fn of mainTab.scriptsAlwaysEvalAfterRender) {\r\n fn();\r\n }\r\n }\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сериализует данные полей формы.\r\n * @method WebAccess.components.CardTabMainTab#_serializeCardForm\r\n * @private\r\n * @param {string} [opt_container] Строка с html либо селектором, данные из которых будут сериализованы.\r\n * @returns {string} Сериализованные поля формы карточки.\r\n */\r\n _serializeCardForm(opt_container) {\r\n let jMain = $(opt_container || '.conversation-container');\r\n let jMainFormValues = jMain.find('input[type=text],input[type=checkbox],input[type=radio],select,textarea');\r\n let jHiddenFormValues = jMain.find('input[id^=hSelID_]').filter((i, elem) => { // TODO: может нафиг этот фильтр? и так норм поля собираются\r\n let dispInp = jMain.find('#' + $(elem).attr('name'));\r\n return !!dispInp.length;\r\n });\r\n return jMainFormValues.serialize() + '&' + jHiddenFormValues.serialize();\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сериализует данные вложений.\r\n * @method WebAccess.components.CardTabMainTab#_serializeAttachments\r\n * @private\r\n * @param {string} [opt_container] Строка с html либо селектором, данные из которых будут сериализованы.\r\n * @returns {string} Сериализованная область вложений карточки.\r\n */\r\n _serializeAttachments(opt_container) {\r\n let jAttachments = $(opt_container || '.attachments_list');\r\n if (!jAttachments.find('#pnlEmpty').length) {\r\n let attachmentsData = [];\r\n jAttachments.find('[data-name=\"ObjectListItem\"]').each((i, el) => {\r\n let jAttachment = $(el);\r\n let kind = jAttachment.attr('kind');\r\n let attachmentInfo = kind + '_' + jAttachment.attr('id');\r\n if (kind === 'Ref') {\r\n attachmentInfo += '_' + jAttachment.attr('compcode');\r\n }\r\n attachmentsData.push(attachmentInfo);\r\n });\r\n return '&attachments=' + attachmentsData.join(';');\r\n }\r\n return '';\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вытащить скрипты из html.\r\n * @method WebAccess.components.CardTabMainTab#_extractScriptsFromHtml\r\n * @private\r\n * @param {string} sourceHtml Исходная строка с html.\r\n * @returns {string} Строка с декодированным html с вырезанными тегами \r\n \r\n \r\n
    \r\n
    \r\n \"\"\r\n \"\"\r\n  ${spinnerText}... \r\n
    \r\n
    \r\n ${imagesOuterHtml}\r\n \r\n `;\r\n\r\n tmpWindow.document.write(customHTML);\r\n tmpWindow.document.close();\r\n }\r\n }\r\n\r\n global.MultipageActions = MultipageActions;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function(global) {\r\n\r\n /**\r\n * Действия над табличным документом.\r\n *\r\n * @since 5.7.0\r\n */\r\n class SpreadsheetActions extends global.BaseActions {\r\n\r\n constructor(data) {\r\n super();\r\n this._settings = {};\r\n this._initAttributes(data);\r\n }\r\n }\r\n\r\n global.SpreadsheetActions = SpreadsheetActions;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // 352px - ширина области комментариев\r\n const commentAreaWidth = 352;\r\n\r\n /**\r\n * Действия над текстовым документом.\r\n * (Масштабирование)\r\n */\r\n class TextActions extends global.BaseActions {\r\n\r\n constructor(context) {\r\n super();\r\n this._settings = new global.TextDocumentPreviewSettings();\r\n this._initAttributes(context);\r\n }\r\n\r\n /**\r\n * @see Core.preview.BaseActions._initAttributes\r\n */\r\n _initAttributes(context) {\r\n super._initAttributes(context);\r\n this._body = this._jFrameContents.find('body');\r\n }\r\n\r\n /**\r\n * Масштабирование контента.\r\n *\r\n * @method _zoom\r\n * @param {number} zoomValue Коэфициент масштабирования.\r\n * @private\r\n */\r\n _zoom(zoomValue) {\r\n const jScaledContent = this._body.find('.text-document-container__scaled-content');\r\n jScaledContent.css({\r\n transform: `scale(${zoomValue})`,\r\n });\r\n\r\n requestAnimationFrame(() => {\r\n const marginTop = Math.floor(jScaledContent.outerHeight() * (zoomValue - 1));\r\n jScaledContent.css({\r\n marginTop: `${marginTop}px`,\r\n });\r\n });\r\n\r\n this._zoomValue = zoomValue;\r\n this.movePreview();\r\n }\r\n\r\n /**\r\n * @see BaseActions.onResize\r\n */\r\n onResize() {\r\n this.setScale();\r\n }\r\n\r\n /**\r\n * @see BaseActions.movePreview\r\n */\r\n movePreview() {\r\n const sourceWidth = this._body.find('.text-document-container').prop('clientWidth');\r\n const jContentContainer = this._body.find('.text-document-container__scaled-content');\r\n let maxPageWidth = 0;\r\n\r\n const jWordDocumentPages = this._body.find('.word-document-page__main-content');\r\n if (jWordDocumentPages.length) {\r\n jWordDocumentPages.each((index, domElement) => {\r\n const commentsWidth = this._settings.commentsVisibility ? commentAreaWidth : 0;\r\n const jCurrentPage = $(domElement);\r\n const currentPageWidth = commentsWidth + jCurrentPage.outerWidth();\r\n if (currentPageWidth > maxPageWidth) {\r\n maxPageWidth = currentPageWidth;\r\n }\r\n });\r\n\r\n } else {\r\n // Сделано для того, чтобы текстовые документы при увеличении масштаба не увеличивались в ширину.\r\n jContentContainer.css({\r\n left: 0,\r\n });\r\n maxPageWidth = jContentContainer.children().outerWidth();\r\n }\r\n\r\n const left = (sourceWidth - maxPageWidth * this._zoomValue) / 2;\r\n if (left > 0) {\r\n jContentContainer.css({\r\n left: left,\r\n });\r\n } else {\r\n jContentContainer.css({\r\n left: 0,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Установить масштаб.\r\n * Возможные значения:\r\n * - число;\r\n * - 'w' - подбор по ширине отображаемых страниц.\r\n * @see Core.preview.BaseActions.setScale\r\n */\r\n setScale(key = this._settings.previewScale) {\r\n super.setScale(key);\r\n this._setScaleValueInDropdown(key);\r\n\r\n requestAnimationFrame(() => {\r\n if (key === 'w') {\r\n // Определить, насколько прокручен viewport\r\n const viewportTop = this._body.find('.text-document-container').scrollTop();\r\n const viewportBottom = viewportTop + this._jFrame.height();\r\n\r\n // Получить список видимых страниц\r\n requestAnimationFrame(() => {\r\n let documentWidth = 0;\r\n const viewportWidth = this._jFrame.innerWidth();\r\n this._body.find('.text-document-container__scaled-content').children().each((index, element) => {\r\n const jDocumentPage = $(element);\r\n\r\n const jPageTop = jDocumentPage.position().top;\r\n const jPageBottom = jPageTop + jDocumentPage.height();\r\n\r\n if (jPageBottom > viewportTop && jPageTop < viewportBottom) {\r\n // Просуммировать ширины дочерних элементов\r\n let pageWidth = 32;\r\n\r\n const jWordDocumentPages = jDocumentPage.children('.word-document-page__main-content');\r\n if (jWordDocumentPages.length) {\r\n if (this.settings.commentsVisibility) {\r\n pageWidth += commentAreaWidth;\r\n }\r\n pageWidth += jWordDocumentPages.outerWidth();\r\n if (pageWidth > documentWidth) {\r\n documentWidth = pageWidth;\r\n }\r\n\r\n } else {\r\n pageWidth += jDocumentPage.outerWidth();\r\n // 16px -- резерв для вертикального скроллбара\r\n documentWidth = Math.max(pageWidth, viewportWidth + 16);\r\n }\r\n }\r\n });\r\n\r\n // Получить ширину viewport'а\r\n const zoomValue = Math.floor(viewportWidth / documentWidth * 100) / 100;\r\n this._zoom(zoomValue);\r\n });\r\n\r\n } else {\r\n // Получить масштаб\r\n const zoomValue = +key / 100;\r\n requestAnimationFrame(() => {\r\n this._zoom(zoomValue);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n global.TextActions = TextActions;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Селекторы для объектов.\r\n const wordDocumentSelector = {\r\n commentArea: '.word-document-page__comments',\r\n deletedText: 'del',\r\n insertedText: 'ins',\r\n };\r\n\r\n // Доступные способы масштабирования области предпросмотра\r\n const PREVIEW_SCALE = {\r\n FIT_WIDTH: 'w',\r\n };\r\n\r\n /**\r\n * Действия над документом MS Word.\r\n * (Отображение комментариев и изменений)\r\n */\r\n class WordDocumentActions extends global.TextActions {\r\n\r\n constructor(context) {\r\n super(context);\r\n }\r\n\r\n /**\r\n * Включить отображение изменений.\r\n *\r\n * @function Core.preview.actions.enableTrackChanges\r\n */\r\n enableTrackChanges() {\r\n this._jFrameContents.find(wordDocumentSelector.insertedText).addClass('ins_highlighted');\r\n this._jFrameContents.find(wordDocumentSelector.deletedText).show();\r\n\r\n Core.preview.actions.settings.trackChangesVisibility = true;\r\n }\r\n\r\n /**\r\n * Отключить отображение изменений.\r\n *\r\n * @function Core.preview.actions.disableTrackChanges\r\n */\r\n disableTrackChanges() {\r\n this._jFrameContents.find(wordDocumentSelector.insertedText).removeClass('ins_highlighted');\r\n this._jFrameContents.find(wordDocumentSelector.deletedText).hide();\r\n\r\n Core.preview.actions.settings.trackChangesVisibility = false;\r\n }\r\n\r\n /**\r\n * Включить отображение комментариев.\r\n *\r\n * @function Core.preview.actions.enableComments\r\n * @param {boolean} [shouldMovePreview = true] Необходимость перерасчета и перемещения документа в центр.\r\n */\r\n enableComments(shouldMovePreview = true) {\r\n // Найдем все области комментариев и отобразим их\r\n this._jFrameContents.find(wordDocumentSelector.commentArea).show();\r\n Core.preview.actions.settings.commentsVisibility = true;\r\n\r\n if (shouldMovePreview) {\r\n this._moveOrScalePreview();\r\n }\r\n }\r\n\r\n /**\r\n * Выключить отображение комментариев.\r\n *\r\n * @function Core.preview.actions.disableComments\r\n * @param {boolean} [shouldMovePreview = true] Необходимость перерасчета и перемещения документа в центр.\r\n */\r\n disableComments(shouldMovePreview = true) {\r\n // Найдем все области комментариев и скроем их\r\n this._jFrameContents.find(wordDocumentSelector.commentArea).hide();\r\n Core.preview.actions.settings.commentsVisibility = false;\r\n\r\n if (shouldMovePreview) {\r\n this._moveOrScalePreview();\r\n }\r\n }\r\n\r\n /**\r\n * Сдвинуть или смасштабировать область предпросмотра.\r\n *\r\n * @function Core.preview.actions._moveOrScalePreview\r\n * @private\r\n * @since 5.7.0\r\n */\r\n _moveOrScalePreview() {\r\n if (Core.preview.actions.settings.previewScale === PREVIEW_SCALE.FIT_WIDTH) {\r\n Core.preview.actions.setScale();\r\n } else {\r\n Core.preview.actions.movePreview();\r\n }\r\n }\r\n\r\n /**\r\n * @see BaseActions.printDocFromPreview\r\n */\r\n printDocFromPreview() { \r\n const iframe = window.frames.contentContainer;\r\n iframe.focus();\r\n if (iframe.document) {\r\n iframe.document.execCommand('print', false, null);\r\n } else {\r\n const tmpWindow = window.open('', 'PRINT', '');\r\n const contentDoc = $('#contentContainer').get(0).contentDocument;\r\n // Сформировать html для печати\r\n const jBody = $(contentDoc.body)[0].innerHTML;\r\n // подвинем к левому верхнему углу\r\n const customHTML = `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ${jBody}\r\n \r\n `;\r\n\r\n tmpWindow.document.write(customHTML);\r\n tmpWindow.document.close();\r\n }\r\n }\r\n }\r\n\r\n global.WordDocumentActions = WordDocumentActions;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Базовый класс настроек предпросмотра.\r\n *\r\n * @since 5.7.0\r\n */\r\n class BaseDocumentPreviewSettings {\r\n\r\n /**\r\n * Масштабирование по умолчанию.\r\n *\r\n * @property defaultScale\r\n * @return {string} Значение масштабирования по умолчанию.\r\n * @static\r\n */\r\n static get defaultScale() {\r\n return '';\r\n }\r\n\r\n /**\r\n * Имя группы набора свойств.\r\n *\r\n * @property storageGroupName\r\n * @return {string} Имя группы набора свойств.\r\n */\r\n get storageGroupName() {\r\n if (!this._location) {\r\n this._location = WA.getLocation();\r\n // Если предпросмотр открыт в полноэкранном режиме, то настройки нужно получить, как для обычного\r\n if (this._location === 'documentpreview') {\r\n this._location = 'doc';\r\n }\r\n }\r\n return this._location;\r\n }\r\n\r\n /**\r\n * Видимость комментариев.\r\n *\r\n * @property commentsVisibility\r\n * @returns {boolean} Видимость комментариев.\r\n */\r\n get commentsVisibility() {\r\n return false;\r\n }\r\n set commentsVisibility(isVisible) { }\r\n\r\n /**\r\n * Видимость изменений.\r\n *\r\n * @property trackChangesVisibility\r\n * @returns {boolean} Видимость изменений.\r\n */\r\n get trackChangesVisibility() {\r\n return false;\r\n }\r\n set trackChangesVisibility(isVisible) { }\r\n\r\n /**\r\n * Масштабирование.\r\n *\r\n * @property previewScale\r\n * @returns {string} Масштабирование.\r\n */\r\n get previewScale() {\r\n return localStorage.getItem(this._previewScaleStorageName) || this.constructor.defaultScale;\r\n }\r\n set previewScale(scale) {\r\n if (scale) {\r\n localStorage.setItem(this._previewScaleStorageName, scale);\r\n }\r\n }\r\n\r\n }\r\n\r\n global.BaseDocumentPreviewSettings = BaseDocumentPreviewSettings;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Настройки предпросмотра для предпросмотра с картинками.\r\n *\r\n * @since 5.7.0\r\n */\r\n class ImageDocumentPreviewSettings extends global.BaseDocumentPreviewSettings {\r\n\r\n constructor() {\r\n super();\r\n this._previewScaleStorageName = `preview-${this.storageGroupName}-previewScale`;\r\n }\r\n\r\n /**\r\n * @see BaseDocumentPreviewSettings.defaultScale\r\n */\r\n static get defaultScale() {\r\n return 'a';\r\n }\r\n\r\n }\r\n\r\n global.ImageDocumentPreviewSettings = ImageDocumentPreviewSettings;\r\n\r\n})(window.Core.preview);\r\n\r\n","'use strict';\r\n\r\n(function(global) {\r\n\r\n /**\r\n * Настройки предпросмотра для текстовых документов.\r\n *\r\n * @since 5.7.0\r\n */\r\n class TextDocumentPreviewSettings extends global.BaseDocumentPreviewSettings {\r\n\r\n constructor() {\r\n super();\r\n this._enableTrackChangesStorageName = `text-preview-${this.storageGroupName}-enableTrackChanges`;\r\n this._previewScaleStorageName = `text-preview-${this.storageGroupName}-previewScale`;\r\n this._showCommentsStorageName = `text-preview-${this.storageGroupName}-showComments`;\r\n }\r\n\r\n /**\r\n * @see BaseDocumentPreviewSettings.defaultScale\r\n */\r\n static get defaultScale() {\r\n return '100';\r\n }\r\n\r\n /**\r\n * @see BaseDocumentPreviewSettings#commentsVisibility\r\n */\r\n get commentsVisibility() {\r\n return localStorage.getItem(this._showCommentsStorageName) === 'true';\r\n }\r\n set commentsVisibility(isVisible) {\r\n localStorage.setItem(this._showCommentsStorageName, isVisible.toString());\r\n }\r\n\r\n /**\r\n * @see BaseDocumentPreviewSettings#trackChangesVisibility\r\n */\r\n get trackChangesVisibility() {\r\n return localStorage.getItem(this._enableTrackChangesStorageName) === 'true';\r\n }\r\n set trackChangesVisibility(isVisible) {\r\n localStorage.setItem(this._enableTrackChangesStorageName, isVisible.toString());\r\n }\r\n\r\n }\r\n\r\n global.TextDocumentPreviewSettings = TextDocumentPreviewSettings;\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Способы масштабирования области предпросмотра\r\n const PREVIEW_SCALE = {\r\n FIT_HEIGHT: 'h',\r\n FIT_WIDTH: 'w',\r\n FIT_WINDOW: 'a',\r\n };\r\n\r\n const PREVIEW_SCALE_LOCALIZATION = {\r\n FIT_HEIGHT: L('FIT_HEIGHT'),\r\n FIT_WIDTH: L('FIT_WIDTH'),\r\n FIT_WINDOW: L('FIT_WINDOW'),\r\n };\r\n\r\n // Идентификаторы для хранения приватных свойств с jQuery-объектами тулбара\r\n const toolbarPrivatePropertyKey = Symbol('toolbar');\r\n const toolbarDataPrivatePropertyKey = Symbol('toolbarData');\r\n const toolbarControlsPrivatePropertyKey = Symbol('toolbarControls');\r\n\r\n /**\r\n * Тулбар предпросмотра.\r\n *\r\n * @hideconstructor\r\n * @since 5.7.0\r\n */\r\n class Toolbar {\r\n\r\n init(){\r\n this[toolbarPrivatePropertyKey] = $('#preview-panel');\r\n\r\n // Модель тулбара предпросмотра\r\n this[toolbarDataPrivatePropertyKey] = {\r\n paginationButtons: new Map([\r\n ['previousPage', {\r\n cssClass: '.preview-panel__control-arrow_left',\r\n action: () => window.Core.preview.actions.goToPreviousPage(),\r\n }],\r\n ['nextPage', {\r\n cssClass: '.preview-panel__control-arrow_right',\r\n action: () => window.Core.preview.actions.goToNextPage(),\r\n }],\r\n ]),\r\n commonButtons: new Map([\r\n ['printFromPreview', {\r\n cssClass: '.print-from-preview',\r\n action: () => window.Core.preview.actions.printDocFromPreview(),\r\n }],\r\n ['changeWindowMode', {\r\n cssClass: '.change-window-mode',\r\n action: () => window.Core.preview.actions.toggleFullscreen(),\r\n }],\r\n ]),\r\n fitToButtons: new Map([\r\n ['fitToHeight', {\r\n cssClass: '.fit-to-height',\r\n scale: PREVIEW_SCALE.FIT_HEIGHT,\r\n }],\r\n ['fitToWidth', {\r\n cssClass: '.fit-to-width',\r\n scale: PREVIEW_SCALE.FIT_WIDTH,\r\n }],\r\n ['fitToWindow', {\r\n cssClass: '.fit-to-window',\r\n scale: PREVIEW_SCALE.FIT_WINDOW,\r\n }],\r\n ]),\r\n rotateButtons: new Map([\r\n ['rotateCW', {\r\n cssClass: '.rotate-CW',\r\n action: () => window.Core.preview.actions.rotateCW(),\r\n }],\r\n ['rotateCCW', {\r\n cssClass: '.rotate-CCW',\r\n action: () => window.Core.preview.actions.rotateCCW(),\r\n }],\r\n ]),\r\n wordButtons: new Map([\r\n ['enableChangeTrack', {\r\n cssClass: '.enable-change-track',\r\n action: () => window.Core.preview.actions.enableTrackChanges(),\r\n reverseAction: () => window.Core.preview.actions.disableTrackChanges(),\r\n }],\r\n ['enableComments', {\r\n cssClass: '.enable-comments',\r\n action: () => window.Core.preview.actions.enableComments(),\r\n reverseAction: () => window.Core.preview.actions.disableComments(),\r\n }],\r\n ]),\r\n };\r\n\r\n this[toolbarControlsPrivatePropertyKey] = this._prepareControls();\r\n\r\n this._initButtons();\r\n this.initScaleInputValues();\r\n }\r\n\r\n /**\r\n * Инициализация значений масштаба для документа.\r\n *\r\n * @method initScaleInputValues\r\n * @inner\r\n */\r\n initScaleInputValues() {\r\n // Скорректировать значения масштаба для документов\r\n const jScaleInput = $('#scaleinp');\r\n const scaleRequisiteInstance = jScaleInput.data('DropDownListInstance');\r\n if (!!scaleRequisiteInstance) {\r\n let scaleDropDownItems = scaleRequisiteInstance['clearDropDownListItems'];\r\n if (!!scaleDropDownItems) {\r\n scaleDropDownItems.apply(scaleRequisiteInstance);\r\n }\r\n }\r\n\r\n // Добавить значения\r\n let values;\r\n if (Core.preview.document.dataType.isText) {\r\n values = [\r\n [\r\n PREVIEW_SCALE.FIT_WIDTH,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WIDTH,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WIDTH,\r\n false,\r\n ],\r\n ];\r\n } else {\r\n values = [\r\n [\r\n PREVIEW_SCALE.FIT_WIDTH,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WIDTH,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WIDTH,\r\n false,\r\n ],\r\n [\r\n PREVIEW_SCALE.FIT_HEIGHT,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_HEIGHT,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_HEIGHT,\r\n false,\r\n ],\r\n [\r\n PREVIEW_SCALE.FIT_WINDOW,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WINDOW,\r\n PREVIEW_SCALE_LOCALIZATION.FIT_WINDOW,\r\n false,\r\n ],\r\n ];\r\n }\r\n for (let scale = 20; scale <= 200; scale += 20) {\r\n values.push(\r\n [scale.toString(), `${scale}%`, `${scale}%`, false ],\r\n );\r\n }\r\n values.forEach(value => {\r\n if (!!scaleRequisiteInstance) {\r\n let scaleDropDownItems = scaleRequisiteInstance['addDropDownListItem'];\r\n if (!!scaleDropDownItems) {\r\n scaleDropDownItems.apply(scaleRequisiteInstance, [value,]);\r\n }\r\n } \r\n });\r\n }\r\n\r\n /**\r\n * Показывает или скрывает паджинацию; заполняет количество страниц документа.\r\n *\r\n * @param {number} pageCount\r\n */\r\n updatePaginator(pageCount) {\r\n const { pagination } = this.controls;\r\n if (pageCount <= 1) {\r\n pagination.hide();\r\n } else {\r\n pagination.updatePageCount(pageCount);\r\n pagination.show();\r\n }\r\n }\r\n\r\n /**\r\n * Tулбар предпросмотра.\r\n *\r\n * @private\r\n * @property _jToolbar\r\n * @return {Object} jQuery-объект тулбара предпросмотра.\r\n */\r\n get _jToolbar() {\r\n return this[toolbarPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Модель тулбара предпросмотра.\r\n *\r\n * @private\r\n * @property _data\r\n * @return {Object} моджель тулбара предпросмотра.\r\n */\r\n get _data() {\r\n return this[toolbarDataPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Контролы предпросмотра.\r\n *\r\n * @property controls\r\n * @return {Object} Список контролов тулбара предпросмотра.\r\n */\r\n get controls() {\r\n return this[toolbarControlsPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Создать список контролов тулбара предпросмотра\r\n *\r\n * @method _initControls\r\n * @private\r\n * @return {Object} список контролов тулбара предпросмотра.\r\n */\r\n _prepareControls() {\r\n\r\n /**\r\n * Получить селекторы контрола из модели тулбара\r\n *\r\n * @function getButtonSelectorHelper\r\n * @inner\r\n * @property {object} buttonGroupData Модель данных группы кнопок тулбара\r\n */\r\n const getControlSelectorHelper = (buttonGroupData) => {\r\n return Array.from(buttonGroupData, (\r\n [, buttonData]) => buttonData.cssClass\r\n );\r\n };\r\n\r\n // Список селекторов контролов тулбара\r\n let controlSelectors = {\r\n scale: ['#scale'],\r\n fitToButtons: getControlSelectorHelper(this._data.fitToButtons),\r\n rotateButtons: getControlSelectorHelper(this._data.rotateButtons),\r\n wordButtons: getControlSelectorHelper(this._data.wordButtons),\r\n };\r\n\r\n let controls = {};\r\n Object.keys(controlSelectors).map((controlName) => {\r\n controls[controlName] = new window.Core.preview.toolbar.ToolbarControl(controlSelectors[controlName]);\r\n });\r\n // Контрол пагинации создаётся из отдельного класса, так как у него есть свой метод updatePageCount\r\n controls.pagination = new window.Core.preview.toolbar.PaginationToolbarControl(['#paginator']);\r\n\r\n return controls;\r\n }\r\n\r\n /**\r\n * Инициализировать кнопки тулбара предпросмотра\r\n *\r\n * @method _initButtons\r\n * @private\r\n */\r\n _initButtons() {\r\n this.buttons = {};\r\n\r\n this._bindContextMenuButton();\r\n this._bindPaginationControl();\r\n for (let [buttonName, buttonData] of this._data.fitToButtons ) {\r\n this.buttons[buttonName] = new window.Core.preview.toolbar.FitToToolbarButton(\r\n buttonData.cssClass,\r\n buttonData.scale\r\n );\r\n }\r\n for (let [buttonName, buttonData] of this._data.rotateButtons ) {\r\n this.buttons[buttonName] = new window.Core.preview.toolbar.BaseToolbarButton(\r\n buttonData.cssClass,\r\n buttonData.action\r\n );\r\n }\r\n for (let [buttonName, buttonData] of this._data.wordButtons ) {\r\n this.buttons[buttonName] = new window.Core.preview.toolbar.SelectableToolbarButton(\r\n buttonData.cssClass,\r\n buttonData.action,\r\n buttonData.reverseAction\r\n );\r\n }\r\n for (let [buttonName, buttonData] of this._data.commonButtons ) {\r\n this.buttons[buttonName] = new window.Core.preview.toolbar.BaseToolbarButton(\r\n buttonData.cssClass,\r\n buttonData.action\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Привязать (bind) нажатие кнопки вызова контектсного меню к соответсвующей фукциональности.\r\n * Эта кнопка доступна только в полноэкранном режиме.\r\n *\r\n * @method _bindContextMenuButton\r\n * @private\r\n */\r\n _bindContextMenuButton() {\r\n const jContextMenuButton = this._jToolbar.find('.document-context-menu');\r\n if (!jContextMenuButton.length) {\r\n return;\r\n }\r\n\r\n jContextMenuButton\r\n .attr('id', WA.CR.ID)\r\n .attr('kind', 'edoc')\r\n .addClass('cannot_delete');\r\n\r\n jContextMenuButton.on('click', () => {\r\n // Добавляем атрибуты, необходимые для работы contextmenu\r\n const jButtonsPanel = jContextMenuButton.closest('.preview-panel');\r\n const contextmenuOffset = {\r\n left: jContextMenuButton.offset().left,\r\n top: jButtonsPanel.offset().top + jButtonsPanel.outerHeight(),\r\n };\r\n\r\n window.Core.contextmenu.show(jContextMenuButton, {}, contextmenuOffset, false);\r\n return false;\r\n });\r\n }\r\n\r\n /**\r\n * Привязать (bind) действия над контролом пагинации к соответсвующей фукциональности.\r\n *\r\n * @method _bindPaginationControl\r\n * @private\r\n */\r\n _bindPaginationControl() {\r\n /**\r\n * Обёртка над функцией перехода на новую страницу документа.\r\n *\r\n * @function setJumpToPageWrapper\r\n * @inner\r\n * @param {object} domButton DOM-элемент кнопки тулбара предпросмотра.\r\n */\r\n const setJumpToPageWrapper = (domButton) => {\r\n const jButton = $(domButton);\r\n const newPageNumber = Number(jButton.val());\r\n window.Core.preview.actions.jumpToPage(newPageNumber);\r\n };\r\n\r\n // Обработка событий поля ввода страницы документа\r\n const jPageNumberField = this._jToolbar.find('.page-number-field');\r\n jPageNumberField.on('keypress', event => {\r\n if (event.which === 13) {\r\n setJumpToPageWrapper(event.target);\r\n event.preventDefault();\r\n }\r\n\r\n if (String.fromCharCode(event.which).match(/[^0-9]/g)) {\r\n event.preventDefault();\r\n }\r\n }).on('blur', event => {\r\n setJumpToPageWrapper(event.target);\r\n });\r\n\r\n for (let [buttonName, buttonData] of this._data.paginationButtons ) {\r\n this.buttons[buttonName] = new window.Core.preview.toolbar.BaseToolbarButton(\r\n buttonData.cssClass,\r\n buttonData.action\r\n );\r\n }\r\n }\r\n }\r\n\r\n global.toolbar = new Toolbar();\r\n\r\n})(window.Core.preview);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Идентификатор для хранения приватного свойства с селектором кнопки тулбара\r\n const toolbarButtonSelectorPrivatePropertyKey = Symbol('selector');\r\n\r\n // Идентификатор для хранения приватного свойства с действием кнопки тулбара\r\n const toolbarButtonActionPrivatePropertyKey = Symbol('action');\r\n\r\n /**\r\n * Кнопка тулбара предпросмотра.\r\n *\r\n * @namespace window.Core.preview.toolbar\r\n * @since 5.7.0\r\n */\r\n class BaseToolbarButton {\r\n\r\n constructor(selector, action) {\r\n this[toolbarButtonSelectorPrivatePropertyKey] = $(`#preview-panel ${selector}`);\r\n this[toolbarButtonActionPrivatePropertyKey] = action;\r\n this._bindAction();\r\n }\r\n\r\n /**\r\n * Кнопка тулбара предпросмотра.\r\n *\r\n * @private\r\n * @property _jButton\r\n * @return {Object} jQuery-объект кнопки тулбара предпросмотра.\r\n */\r\n get _jButton() {\r\n return this[toolbarButtonSelectorPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Действие кнопки предпросмотра.\r\n *\r\n * @private\r\n * @property _action\r\n * @return {function} Действие предпросмотра из пространства имён window.Core.preview.actions.\r\n */\r\n get _action() {\r\n return this[toolbarButtonActionPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Является ли кнопка кликабельной\r\n *\r\n * @property isActive\r\n * @return {boolean} TRUE - если кнопка кликабельна (не disabled), иначе - FALSE.\r\n */\r\n get isActive() {\r\n return !this._jButton.hasClass('btn-disabled');\r\n }\r\n\r\n /**\r\n * Привязать функцию к событию нажатия на кнопку.\r\n *\r\n * @method _bindAction\r\n * @private\r\n */\r\n _bindAction() {\r\n this._jButton.on('click', () => {\r\n if (this.isActive) {\r\n if (typeof this._action === 'function') {\r\n this._performAction();\r\n } else {\r\n console.error(`${this._action} is ${typeof this._action}. Should be function instead`);\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n /**\r\n * Выполнить действие кнопки.\r\n *\r\n * @method _performAction\r\n * @private\r\n */\r\n _performAction() {\r\n this._action();\r\n }\r\n }\r\n\r\n global.BaseToolbarButton = BaseToolbarButton;\r\n\r\n})(window.Core.preview.toolbar);\r\n","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Идентификатор для хранения приватного свойства с jQuery-объектом вызываемой функции кнопки тулбара\r\n const toolbarButtonReverseActionPrivatePropertyKey = Symbol('action');\r\n \r\n /**\r\n * Переключаемая кнопка тулбара предпросмотра (с состоянием нажатости).\r\n *\r\n * @namespace window.Core.preview.toolbar\r\n * @since 5.7.0\r\n */\r\n class SelectableToolbarButton extends global.BaseToolbarButton {\r\n\r\n constructor(buttonSelector, mainAction, reverseAction) {\r\n super(buttonSelector, mainAction);\r\n this[toolbarButtonReverseActionPrivatePropertyKey] = reverseAction;\r\n }\r\n\r\n /**\r\n * Действие кнопки предпросмотра при нажатой кнопке.\r\n *\r\n * @private\r\n * @property _reverseAction\r\n * @return {function} Функция предпросмотра из пространства имён window.Core.preview.actions.\r\n */\r\n get _reverseAction() {\r\n return this[toolbarButtonReverseActionPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Является ли кнопка нажатой\r\n *\r\n * @property isTurnedOn\r\n * @return {boolean} TRUE - если кнопка нажата, иначе - FALSE.\r\n */\r\n get isTurnedOn() {\r\n return this._jButton.hasClass('selected');\r\n }\r\n\r\n /**\r\n * @see BaseToolbarButton._performAction\r\n */\r\n _performAction() {\r\n const isTurnedOn = this.isTurnedOn;\r\n if (isTurnedOn) {\r\n this.turnOff();\r\n } else {\r\n this.turnOn();\r\n }\r\n\r\n const shouldCallDefaultAction = !isTurnedOn;\r\n this._toggleAction(shouldCallDefaultAction);\r\n }\r\n\r\n /**\r\n * Вызвать действие в зависимости от нажатости кнопки\r\n *\r\n * @method _toggleAction\r\n * @param {boolean} shouldCallDefaultAction TRUE - если нужно вызвать основное действие, FALSE - если дополнительное.\r\n */\r\n _toggleAction(shouldCallDefaultAction) {\r\n if (shouldCallDefaultAction) {\r\n this._action();\r\n } else if (this._reverseAction) {\r\n this._reverseAction();\r\n }\r\n }\r\n\r\n /**\r\n * Сделать кнопку нажатой (добавлением соответствующего класса)\r\n *\r\n * @method turnOn\r\n */\r\n turnOn() {\r\n this._jButton.addClass('selected');\r\n }\r\n\r\n /**\r\n * Сделать кнопку отжатой (убиранием соответствующего класса)\r\n *\r\n * @method turnOff\r\n */\r\n turnOff() {\r\n this._jButton.removeClass('selected');\r\n }\r\n\r\n /**\r\n * Вызвать состояние нажатости и соответствующее действия\r\n *\r\n * @method setSelectedStateAndPerformAction\r\n * @param {boolean} shouldBeTurnedOn TRUE - если кнопка должна быть нажата, иначе - FALSE.\r\n */\r\n setSelectedStateAndPerformAction(shouldBeTurnedOn) {\r\n if (shouldBeTurnedOn) {\r\n this.turnOn();\r\n } else {\r\n this.turnOff();\r\n }\r\n this._toggleAction(shouldBeTurnedOn);\r\n }\r\n }\r\n\r\n global.SelectableToolbarButton = SelectableToolbarButton;\r\n\r\n})(window.Core.preview.toolbar);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Масштаб по умолчанию в процентах\r\n const DEFAULT_SCALE = '100';\r\n\r\n // Идентификатор для хранения приватного свойства с масштабом, устанавливаемым кнопкой тулбара\r\n const toolbarButtonScalePrivatePropertyKey = Symbol('scale');\r\n\r\n /**\r\n * Кнопка тулбара предпросмотра.\r\n *\r\n * @namespace window.Core.preview.toolbar\r\n * @since 5.7.0\r\n */\r\n class FitToToolbarButton extends global.SelectableToolbarButton {\r\n\r\n constructor(buttonSelector, buttonScale) {\r\n super(buttonSelector, (scale) => window.Core.preview.actions.setScale(scale));\r\n this[toolbarButtonScalePrivatePropertyKey] = buttonScale;\r\n }\r\n\r\n /**\r\n * Способ масштабирования документа (например, по ширине)\r\n *\r\n * @private\r\n * @property _scale\r\n * @return {string}\r\n */\r\n get _scale() {\r\n return this[toolbarButtonScalePrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * @see BaseToolbarButton._performAction\r\n */\r\n _performAction() {\r\n const shouldFitToScale = !this.isTurnedOn;\r\n // Сбрасываем \"нажатость\" у всех кнопок \"масштабировать по\" перед выполнением действия\r\n $('#preview-panel .fit-to').removeClass('selected');\r\n if (shouldFitToScale) {\r\n this.turnOn();\r\n }\r\n this._toggleAction(shouldFitToScale);\r\n }\r\n\r\n /**\r\n * @see BaseToolbarButton._toggleAction\r\n */\r\n _toggleAction(shouldFitToScale) {\r\n let scale = shouldFitToScale ? this._scale : DEFAULT_SCALE;\r\n this._action(scale);\r\n }\r\n }\r\n\r\n global.FitToToolbarButton = FitToToolbarButton;\r\n\r\n})(window.Core.preview.toolbar);","'use strict';\r\n\r\n(function (global) {\r\n\r\n // Идентификатор для хранения приватного свойства с jQuery-объектом контрола тулбара\r\n const toolbarJControlPrivatePropertyKey = Symbol('jControl');\r\n\r\n /**\r\n * Колнтрол тулбара предпросмотра.\r\n * Может быть составным - состоять из других контролов.\r\n *\r\n * @namespace window.Core.preview.toolbar\r\n * @since 5.7.0\r\n */\r\n class ToolbarControl {\r\n\r\n constructor(selectorList) {\r\n const selector = '#preview-panel ' + selectorList.join(', #preview-panel ');\r\n this[toolbarJControlPrivatePropertyKey] = $(selector);\r\n }\r\n\r\n /**\r\n * Кнопка тулбара предпросмотра.\r\n *\r\n * @private\r\n * @property _jButton\r\n * @return {Object} jQuery-объект кнопки тулбара предпросмотра.\r\n */\r\n get _jControl() {\r\n return this[toolbarJControlPrivatePropertyKey];\r\n }\r\n\r\n /**\r\n * Спрятать контрол.\r\n * (Обёртка над jQuery-методом hide)\r\n *\r\n * @method hide\r\n */\r\n hide() {\r\n this._jControl.hide();\r\n }\r\n\r\n /**\r\n * Показать контрол.\r\n * (Обёртка над jQuery-методом show)\r\n *\r\n * @method show\r\n */\r\n show() {\r\n this._jControl.show();\r\n }\r\n }\r\n\r\n global.ToolbarControl = ToolbarControl;\r\n\r\n})(window.Core.preview.toolbar);","'use strict';\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Колнтрол пагинации тулбара предпросмотра.\r\n *\r\n * @namespace window.Core.preview.toolbar\r\n * @since 5.7.0\r\n */\r\n class PaginationToolbarControl extends global.ToolbarControl {\r\n\r\n /**\r\n * Обновляет счётчик количества страниц документа.\r\n *\r\n * @method updatePageCount\r\n * @param {number} pageCount Общее количество страниц документа.\r\n */\r\n updatePageCount(pageCount) {\r\n this._jControl.find('.page-count').text(`/ ${pageCount}`);\r\n }\r\n }\r\n\r\n global.PaginationToolbarControl = PaginationToolbarControl;\r\n\r\n})(window.Core.preview.toolbar);","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу контекстного меню.\r\n * @namespace Core.contextmenu\r\n * @since 5.1.0.1516\r\n */\r\n global.contextmenu = {};\r\n})(window.Core);\r\n\r\n\r\n(function (global) {\r\n\r\n var menusCache = {};\r\n var objKindMap = {\r\n 'edoc': 'EDocument',\r\n 'task': 'Task',\r\n 'job': 'Job',\r\n 'fol': 'Folder',\r\n 'ref': 'ReferenceRecord',\r\n 'usr': 'UserSettings',\r\n 'ver': 'EDocumentVersion',\r\n 'com': 'Common',\r\n 'att': 'Attachments',\r\n 'localcopy': 'LocalCopy',\r\n 'current_fol': 'CurrentFolder'\r\n };\r\n\r\n\r\n /**\r\n * Показывает контекстное меню.\r\n *\r\n * @param {object} clickedEl Объект, по которому совершен клик.\r\n * @param {object} options Параметры.\r\n * @param {object} coords Координаты меню.\r\n * @param {boolean} isRightButton Признак нажатия правой кнопки мыши.\r\n */\r\n global.show = function (obj, options, coords, isRightButton) {\r\n if (obj instanceof jQuery || obj instanceof HTMLElement) {\r\n if (WA.CR && WA.CR.objectList) {\r\n var jClickedEl = $(obj);\r\n\r\n if (isRightButton) {\r\n selectClickedElementAndUnselectOther(jClickedEl);\r\n }\r\n\r\n var selectedItems = WA.CR.objectList.getSelectedItems();\r\n if (selectedItems.length > 1) {\r\n showContextMenuForManyObjects(selectedItems, jClickedEl, options, coords, isRightButton);\r\n // Что бы не вызвалось меню для одного элемента.\r\n return;\r\n }\r\n }\r\n showContextMenuForOneObject(obj, options, coords, isRightButton);\r\n } else {\r\n showForFolderTreeItem(obj, options, coords);\r\n }\r\n };\r\n\r\n function showContextMenuForManyObjects(selectedItems, jClickedEl, options, coords, isRightButton) {\r\n var types = _.chain(selectedItems).pluck('type').uniq().value();\r\n var menuType = 'Mass' + types.join('');\r\n\r\n var resultMenuItems = getMassMenuItemsByTypes(types);\r\n if (resultMenuItems.length === 0) return;\r\n\r\n _toggleMarkAsReadMenuItemText(resultMenuItems, selectedItems);\r\n\r\n var menu = getOrAddContextMenuFormCache(menuType, resultMenuItems, { width: 212 });\r\n if (!menu) return;\r\n // Передаем в контекстное меню список выбранных элементов.\r\n setMenuProperties(menu, { context: selectedItems });\r\n\r\n var hasStatusBar = _.every(selectedItems, function (item) { return item._jObject.find('div.status').length > 0; });\r\n if (hasStatusBar) {\r\n // Показываем горизонтальное меню статусов.\r\n window.Core.toolBars.main.showHorizontalStatusContextMenu(menu, jClickedEl, selectedItems, isRightButton);\r\n }\r\n showContextMenuInternal(menu, jClickedEl, coords);\r\n };\r\n\r\n // Изменяет текст пункта меню \"Пометить прочитанным\" в зависимости от выбранных заданий.\r\n function _toggleMarkAsReadMenuItemText(resultMenuItems, selectedItems) {\r\n var markAsReadMenuItem = _.first(_.filter(resultMenuItems, function (item) { return item.id === 'MarkAsRead' }));\r\n\r\n if (markAsReadMenuItem) {\r\n var jobs = _.filter(selectedItems, function (item) { return item.type === OBJECT_TYPE.JOB });\r\n if (jobs.length > 0) {\r\n if (_.filter(jobs, function (job) { return job.isUnread() }).length === 0) {\r\n markAsReadMenuItem.text = 'MENU_MARK_AS_UNREAD';\r\n } else {\r\n markAsReadMenuItem.text = 'MENU_MARK_AS_READ';\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Создает объект контекстного меню.\r\n function build(options) {\r\n var menu = getOrAddContextMenuFormCache(options.objectType);\r\n if (menu) {\r\n // Изменить доступность пунктов меню.\r\n enableItem('CreateSubTask', menu);\r\n enableItem('CopyDoc', menu);\r\n if (options.cannotDelete) {\r\n disableItem('DeleteLink', menu);\r\n } else {\r\n enableItem('DeleteLink', menu);\r\n }\r\n };\r\n setDefaultItem(menu, options.defaultItem);\r\n\r\n setMenuProperties(menu, {\r\n context: options.proxy,\r\n onHide: options.onHide\r\n });\r\n\r\n return menu;\r\n };\r\n\r\n\r\n function showContextMenuForOneObject(obj, options, coords, isRightButton) {\r\n var el = $(obj);\r\n var listItem = el.parents('.List:first');\r\n var tr = listItem.length > 0 ? listItem : el;\r\n var proxy;\r\n\r\n var menuOptions = {};\r\n\r\n if (options && options.from === 'ReferenceTable') {\r\n proxy = { id: tr.data('recid'), kind: 'ref', refcode: Reference_GetName(), elem: el, tr: tr };\r\n menuOptions.objectType = 'ReferenceRecordTable';\r\n } else {\r\n proxy = GetObjectInfoFromRow(tr);\r\n }\r\n $.extend(proxy, options);\r\n\r\n menuOptions.proxy = proxy;\r\n if (!menuOptions.objectType) {\r\n menuOptions.objectType = objKindMap[proxy.kind.toLowerCase()];\r\n\r\n if (!proxy.kind) {\r\n return;\r\n } else if (proxy.kind.toLowerCase() === 'current_fol') {\r\n proxy.kind = 'fol';\r\n }\r\n }\r\n\r\n if (menuOptions.objectType === 'ReferenceRecord' || menuOptions.objectType === 'ReferenceRecordTable') {\r\n var refName = Reference_GetName();\r\n var refView = Reference_GetView();\r\n var specObjType = [\r\n menuOptions.objectType + '_' + refName,\r\n menuOptions.objectType + '_' + refView,\r\n menuOptions.objectType + '_' + refName + '_' + refView\r\n ];\r\n for (var i = 0, specObjTypeLen = specObjType.length; i < specObjTypeLen; i++) {\r\n if (contextMenuSettings[specObjType[i]]) {\r\n menuOptions.objectType = specObjType[i];\r\n }\r\n }\r\n }\r\n proxy.type = menuOptions.objectType;\r\n\r\n const taskChangeButton = window.WA.CR.toolBar.buttons.TaskChange;\r\n const isTaskReadOnlyMode = window.WA.getLocation() === 'task' && taskChangeButton && !taskChangeButton.isSelected();\r\n menuOptions.cannotDelete = !!(tr.hasClass('cannot_delete') || isTaskReadOnlyMode);\r\n if (menuOptions.objectType === 'EDocumentVersion') {\r\n menuOptions.defaultItem = (g_defaultListAction === 'showcard' || g_defaultListAction === 'preview')\r\n ? 'Preview'\r\n : (g_openDocForEditByDefault ? 'OpenForEdit' : 'ViewInEditor');\r\n }\r\n\r\n if (menuOptions.objectType === 'EDocument') {\r\n switch (g_defaultListAction) {\r\n case 'showcard':\r\n menuOptions.defaultItem = 'Card';\r\n break;\r\n case 'preview':\r\n menuOptions.defaultItem = 'Preview';\r\n break;\r\n case 'open':\r\n menuOptions.defaultItem = 'OpenForEdit';\r\n break;\r\n case 'viewineditor':\r\n menuOptions.defaultItem = 'ViewInEditor';\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n if (menuOptions.objectType === 'EDocument' === 'Task' || menuOptions.objectType === 'Job' || menuOptions.objectType === 'Folder') {\r\n menuOptions.defaultItem = '';\r\n }\r\n\r\n if (!el.hasClass('menuicon_border')) {\r\n ContextMenu.hide();\r\n menuOptions.onHide = function () {\r\n var jListParent = $('body');\r\n jListParent.find('.menuicon_border').removeClass('menuicon_border');\r\n jListParent.find('.menu_select').removeClass('menu_select');\r\n };\r\n\r\n if (!isRightButton) {\r\n el.addClass('menuicon_border');\r\n }\r\n tr.addClass('menu_select');\r\n\r\n var menu = build(menuOptions);\r\n\r\n var hasStatusBar = tr.find('div.status').length > 0;\r\n if ((menuOptions.objectType === 'EDocument' || menuOptions.objectType === 'Task'\r\n || menuOptions.objectType === 'Job' || menuOptions.objectType === 'Folder')\r\n && hasStatusBar) {\r\n // Показываем горизонтальное меню статусов.\r\n window.Core.toolBars.main.showHorizontalStatusContextMenu(menu, el, proxy, isRightButton);\r\n }\r\n\r\n setTimeout(function () { //Для того, что бы контекстное меню для свободной области проводника сразу НЕ скрывалось после отображения.\r\n switch (menuOptions.objectType) {\r\n case 'EDocument':\r\n EDocument(proxy).GetContextMenu(menu, function () { showContextMenuInternal(menu, el, coords); });\r\n break;\r\n case 'EDocumentVersion':\r\n EDocumentVersion(proxy).GetContextMenu(menu, function () { showContextMenuInternal(menu, el, coords); });\r\n break;\r\n case 'ReferenceRecordTable':\r\n showReferenceContextMenu(menu, el, coords);\r\n break;\r\n default:\r\n showContextMenuInternal(menu, el, coords);\r\n }\r\n }, 10);\r\n }\r\n else {\r\n ContextMenu.hide();\r\n }\r\n };\r\n\r\n function showForFolderTreeItem(node, options, coords) {\r\n var objType = node.kind === 'COMPONENT_TOKEN' ? '' : 'fol';\r\n\r\n var menuOptions = {};\r\n menuOptions.objectType = objKindMap[objType];\r\n\r\n if (objType) {\r\n menuOptions.proxy = options;\r\n menuOptions.defaultItem = '';\r\n\r\n ContextMenu.hide();\r\n var menu = build(menuOptions);\r\n showContextMenuInternal(menu, null, coords);\r\n }\r\n };\r\n\r\n // Получает (или добавляет, если нет) компоненту контекстного меню из кэша.\r\n function getOrAddContextMenuFormCache(objType, items, settings) {\r\n if (!menusCache.hasOwnProperty(objType)) {\r\n var menuItems = items;\r\n var menuSettings = settings || {};\r\n\r\n if (!menuItems) {\r\n var settings = contextMenuSettings[objType];\r\n if (!settings) return null;\r\n menuItems = settings.items.slice(0); //Клонируем массив, чтобы сохранить его в первозданном виде.\r\n\r\n // Удаляем пункт \"Вырезать ссылку\" везде кроме папки.\r\n if (location.href.toLowerCase().indexOf('explorer.aspx') == -1) {\r\n menuItems = deleteItemById(menuItems, 'CutLink');\r\n };\r\n\r\n menuSettings = settings.settings;\r\n }\r\n\r\n menusCache[objType] = new ContextMenu(menuItems, menuSettings);\r\n }\r\n\r\n if (menusCache.hasOwnProperty('EDocument')) {\r\n updateContextMenu('EDocument');\r\n }\r\n if (menusCache.hasOwnProperty('EDocumentVersion')) {\r\n updateContextMenu('EDocumentVersion');\r\n }\r\n if (menusCache.hasOwnProperty('Task')) {\r\n updateContextMenu('Task');\r\n }\r\n if (menusCache.hasOwnProperty('Job')) {\r\n updateContextMenu('Job');\r\n }\r\n return menusCache[objType];\r\n };\r\n\r\n // устанавливает свойства контекстного меню.\r\n function setMenuProperties(menu, props) {\r\n menu.self = props.context;\r\n menu.onHide = function () {\r\n if ($.isFunction(props.onHide)) props.onHide();\r\n };\r\n var copyItem = menu.getItemById('CopyLink');\r\n if (copyItem) {\r\n var dd;\r\n copyItem.onCreate = function () { dd = this; }\r\n menu.onShow = function () {\r\n if ($.isFunction(props.onShow)) props.onShow();\r\n }\r\n }\r\n };\r\n\r\n // Получает элементы контекстного меню для массовых операций в зависимости от переданных типов (если типы разные то, будет вычислятся пересечения пунктов меню).\r\n function getMassMenuItemsByTypes(types) {\r\n var resultMenuItems = [];\r\n var resultMenuItemsId = []; // для упрощения поиска\r\n\r\n _.each(types, function (type) {\r\n var menuType;\r\n switch (type) {\r\n case OBJECT_TYPE.EDOCUMENT: menuType = 'MassEDocument'; break;\r\n case OBJECT_TYPE.FOLDER: menuType = 'MassFolder'; break;\r\n case OBJECT_TYPE.TASK: menuType = 'MassTask'; break;\r\n case OBJECT_TYPE.JOB: menuType = 'MassJob'; break;\r\n case OBJECT_TYPE.REFERENCE_RECORD: menuType = 'MassReferenceRecord'; break;\r\n default: return;\r\n }\r\n\r\n var settings = contextMenuSettings[menuType];\r\n if (!settings) return;\r\n var currentItems = settings.items.slice(0); //Клонируем массив, чтобы сохранить его в первозданном виде.\r\n\r\n var newResultMenuItems = [];\r\n var newResultMenuItemsId = []; // для упрощения поиска\r\n\r\n _.each(currentItems, function (currentItem) {\r\n\r\n // Если еще нет объединенного результируешего меню, то добавим все.\r\n // или Если элемент меню уже был добавлен в результирующий, то добавим текущий элемент к новому результирующему.\r\n if (resultMenuItemsId.length === 0 || resultMenuItemsId.indexOf(currentItem.id) !== -1) {\r\n newResultMenuItems.push(currentItem);\r\n newResultMenuItemsId.push(currentItem.id);\r\n }\r\n\r\n });\r\n\r\n resultMenuItems = newResultMenuItems;\r\n resultMenuItemsId = newResultMenuItemsId;\r\n });\r\n\r\n return resultMenuItems;\r\n };\r\n\r\n // Выделяет тот, по которому кликнули и снимает выделения с остальных (если кликнутый элемент не в числе выделенных).\r\n function selectClickedElementAndUnselectOther(jClickedEl) {\r\n if (!jClickedEl.hasClass('List')) {\r\n jClickedEl = jClickedEl.parents('.List:first');\r\n }\r\n var clickedId = jClickedEl.attr('id');\r\n\r\n var selectedItems = WA.CR.objectList.getSelectedItems();\r\n var hasClicked = _.any(selectedItems, function (selectedItem) {\r\n return selectedItem.id === clickedId;\r\n });\r\n\r\n if (!hasClicked) {\r\n // Снимаем выделение со всех остальных.\r\n WA.CR.objectList.deselectAll();\r\n // Выделяем кликнутый.\r\n WA.CR.objectList.selectItem({ id: clickedId });\r\n }\r\n };\r\n\r\n function showContextMenuInternal(menu, el, coords) {\r\n enableDisableItems(menu, el);\r\n if (!coords) menu.show(el);\r\n else menu.showAt(coords, null, null);\r\n }\r\n\r\n function enableDisableItems(menu, el) {\r\n var menuItem;\r\n if (!Core.contextmenu.isElementInFolderTree(el) && Core.toolBars.main.isSearchMode()) {\r\n menuItem = menu.getItemById('CutLink');\r\n if (menuItem) {\r\n menuItem.disabled = true;\r\n delete menuItem.jsaction;\r\n }\r\n menuItem = menu.getItemById('DeleteLink');\r\n if (menuItem) {\r\n menuItem.disabled = true;\r\n delete menuItem.jsaction;\r\n }\r\n }\r\n menuItem = menu.getItemById('PasteLink');\r\n if (menuItem) {\r\n menuItem.disabled = menu.type === 'Attachments' && !$('div [name=PasteLnk]').length;\r\n }\r\n }\r\n\r\n function showReferenceContextMenu(menu, el, coords) {\r\n var menuItem;\r\n if (g_IsReferenceReadOnly) {\r\n menuItem = menu.getItemById(\"Delete\");\r\n if (menuItem) {\r\n menuItem.disabled = true;\r\n delete menuItem.jsaction;\r\n }\r\n\r\n menuItem = menu.getItemById(\"Copy\");\r\n if (menuItem) {\r\n menuItem.disabled = true;\r\n delete menuItem.jsaction;\r\n }\r\n }\r\n if (!coords) menu.show(el); else menu.showAt(coords, null, null);\r\n }\r\n\r\n // Удаляет элемент по ID из массива объектов.\r\n function deleteItemById(items, id) {\r\n var newItems = [];\r\n for (var i = 0; i < items.length; i++) {\r\n //Здесь умышленно не стоит !==, для работы со строками (т.е. \"id\" == id)\r\n if (items[i].id != id) {\r\n newItems.push(items[i]);\r\n }\r\n else {\r\n if (items[i].separator && i > 0) {\r\n items[i - 1].separator = true;\r\n }\r\n }\r\n }\r\n return newItems;\r\n }\r\n\r\n function updateContextMenu(objType) {\r\n var settings = contextMenuSettings[objType];\r\n\r\n var changedItems = switchItemsForAgent(settings);\r\n if (WA.getLocation() !== 'explorer') {\r\n changedItems = deleteItemById(changedItems, 'CutLink');\r\n }\r\n menusCache[objType] = new ContextMenu(changedItems, settings.settings);\r\n }\r\n\r\n function switchItemsForAgent(settings) {\r\n var changedItems = settings.items;\r\n // Убираем действия, только если включена работа без агента.\r\n if (WA.agent.isDisabled()) {\r\n changedItems = deleteItemById(changedItems, 'OpenForEdit');\r\n changedItems = deleteItemById(changedItems, 'ViewInEditor');\r\n if ($.ipad || WA.ENV.isAndroid()) { changedItems = deleteItemById(changedItems, 'Sign'); }\r\n }\r\n\r\n return changedItems;\r\n }\r\n\r\n function disableItem(itemID, menu) {\r\n var menuItem = menu.getItemById(itemID);\r\n if (menuItem) {\r\n menuItem.disabled = true;\r\n }\r\n }\r\n\r\n function enableItem(itemID, menu) {\r\n var menuItem = menu.getItemById(itemID);\r\n if (menuItem) {\r\n menuItem.disabled = false;\r\n }\r\n }\r\n function setDefaultItem(menu, itemID) {\r\n var menuItem = !!itemID ? menu.getItemById(itemID) : menu.items[0];\r\n if (!!menuItem) {\r\n menuItem['default'] = true;\r\n }\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет находится ли переденный элемент в дереве папок.\r\n * @function Core.contextmenu.isElementInFolderTree\r\n * @since 5.0.0.1516\r\n * @return {Core.contextmenu}\r\n */\r\n global.isElementInFolderTree = function (el) {\r\n return (el && el.parents('#Tree').length > 0);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Копировать ссылку\" для папки.\r\n * @function Core.contextmenu.copyFolderLinkOnCreate\r\n * @since 5.0.0.1519\r\n * @return {Core.contextmenu}\r\n */\r\n global.copyFolderLinkOnCreate = function (fol) {\r\n //Нельзя отправлять копировать ссылку на папку \"Ярлыки\" - запрещено в билдере получение по ИД этой папки (http://directum.npo-comp.ru/reference.asp?sys=TEHKASNPO&compcode=%C7%C7%CF&id=5664818).\r\n if (fol instanceof jQuery || fol instanceof HTMLElement) {\r\n var jFol = fol.tr.hasClass('List') ? fol.tr : fol.tr.children();\r\n return { disabled: jFol.hasClass('ShortcutsFolderType') };\r\n } else {\r\n return (fol.hasOwnProperty('canCopy')) ? { disabled: !fol.canCopy } : {};\r\n }\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Делает неактивным пункт \"Вставить ссылки\" в режиме поиска.\r\n */\r\n global.pasteLinksOnCreate = function () {\r\n return {\r\n disabled: Core.toolBars.main.isSearchMode()\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Вставить ссылки\" для папки.\r\n * @function Core.contextmenu.pasteLinksToFolderOnCreate\r\n * @since 5.0.0.1516\r\n * @return {Core.contextmenu}\r\n */\r\n global.pasteLinksToFolderOnCreate = function (fol) {\r\n //Проверка возможности вставки ссылок в папку fol.\r\n //Нельзя вставлять в папки поиска.\r\n var disabled;\r\n var visibility = (WA.getLocation() === 'settings') ? 'hidden' : '';\r\n if (fol instanceof jQuery || fol instanceof HTMLElement) {\r\n var jFol = fol.tr.hasClass('List') ? fol.tr : fol.tr.children();\r\n disabled = Core.toolBars.main.isSearchMode() && !(jFol.hasClass('EDocument_fol') || jFol.hasClass('Job_fol') || jFol.hasClass('Task_fol') || jFol.hasClass('Any_fol'));\r\n } else {\r\n if (fol.hasOwnProperty('canPaste')) disabled = !fol.canPaste;\r\n else return { visibility: visibility };\r\n }\r\n\r\n return {\r\n disabled: disabled,\r\n visibility: visibility\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Действие контекстного меню \"Удалить ссылку\".\r\n * @function Core.contextmenu.deleteLinksFromFolder\r\n * @since 5.0.0.1516\r\n * @return {Core.contextmenu}\r\n */\r\n global.deleteLinksFromFolder = function (fol, callback, msg) {\r\n // Проверим, что fol - узел дерева папок\r\n if (fol.hasOwnProperty('node')) {\r\n let node = fol.node;\r\n\r\n // Получим идентификатор родительской папки\r\n let path = node.key.split('-');\r\n let currentFolderIndex = path.indexOf(node.id);\r\n let parentFolderId = path[currentFolderIndex + 1];\r\n\r\n // Отправим запрос на удаление папки\r\n let deleteFolderLink = new WA.Link(node.id, OBJECT_TYPE.FOLDER);\r\n let deleteFolderLinkModel = deleteFolderLink.toLinkModel();\r\n DeleteLinks(\r\n '',\r\n [deleteFolderLinkModel],\r\n false,\r\n parentFolderId,\r\n true,\r\n () => {\r\n WA.CR.folderTree.updateByFolderID(parentFolderId);\r\n },\r\n true\r\n );\r\n } else {\r\n ObjDeleteLink(fol, null, callback, msg);\r\n }\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Действие контекстного меню \"Удалить ссылку\".\r\n * @function Core.contextmenu.deleteLinksFromFolder\r\n * @since 5.0.0.1516\r\n * @return {Core.contextmenu}\r\n */\r\n global.handleDeleteAction = function (fol) {\r\n var callback = null;\r\n var msg = \"\";\r\n if (WA.getLocation() === \"settings\") {\r\n callback = function (link) {\r\n window.Core.settings.setAutoCleanFolder(link.ID, false);\r\n };\r\n msg = L('SETTINGS_SAVED');\r\n }\r\n\r\n global.deleteLinksFromFolder(fol, callback, msg);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Удалить ссылку\" для папки.\r\n * @function Core.contextmenu.deleteLinksFromFolderOnCreate\r\n * @since 5.0.0.1519\r\n * @return {Core.contextmenu}\r\n */\r\n global.deleteLinksFromFolderOnCreate = function (fol) {\r\n return (fol.hasOwnProperty('canDelete')) ? { disabled: !fol.canDelete } : {};\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Отправить задачей\" для папки.\r\n * @function Core.contextmenu.sendAsTaskAttachmentForFolderOnCreate\r\n * @since 5.0.0.1518\r\n * @return {Core.contextmenu}\r\n */\r\n global.sendAsTaskAttachmentForFolderOnCreate = function (fol) {\r\n //Нельзя отправлять вложением папку \"Ярлыки\" - запрещено в билдере получение по ИД этой папки (http://directum.npo-comp.ru/reference.asp?sys=TEHKASNPO&compcode=%C7%C7%CF&id=5664818).\r\n if (fol instanceof jQuery || fol instanceof HTMLElement) {\r\n var jFol = fol.tr.hasClass('List') ? fol.tr : fol.tr.children();\r\n return { disabled: jFol.hasClass('ShortcutsFolderType') };\r\n } else {\r\n return (fol.hasOwnProperty('canSend')) ? { disabled: !fol.canSend } : {};\r\n }\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Создать и вложить\".\r\n * @function Core.contextmenu.createAndAttachOnCreate\r\n * @since 5.0.0.1522\r\n * @return {Core.contextmenu}\r\n */\r\n global.createAndAttachOnCreate = function () {\r\n\r\n var jAttachmentsToolbar = $(\"#content_list_toolbox\");\r\n var isDisabled = true;\r\n\r\n if (jAttachmentsToolbar.length > 0) {\r\n var jAttachButton = jAttachmentsToolbar.find(\".attach_doc_btn\");\r\n\r\n if (jAttachButton.length > 0)\r\n isDisabled = jAttachButton.hasClass(\"disabled\");\r\n }\r\n\r\n return {\r\n disabled: isDisabled\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Создание контекстного меню для контейнера main главной страницы.\r\n *\r\n * @function Core.contextmenu.createFolderContextMenu\r\n * @since 5.2.0.2006\r\n */\r\n global.createFolderContextMenu = () => {\r\n const jMainContainer = $('#main_container');\r\n jMainContainer.attr('kind', 'com');\r\n jMainContainer.bind('contextmenu', (event) => {\r\n // внутри может оказаться контейнер ошибки, по клике на него меню не нужно\r\n if (event.target.classList.contains('error_div_msg')) {\r\n return false;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n ShowContextMenu($(event.target), {}, {\r\n 'left': event.pageX,\r\n 'top': event.pageY,\r\n }, true);\r\n\r\n return false;\r\n });\r\n };\r\n\r\n /**\r\n * Клик по пункту контекстного меню \"Показать/скрыть папки в списке\".\r\n * @function Core.contextmenu.showFolderInList\r\n * @since 5.5.0.9000\r\n * @return {Core.contextmenu}\r\n */\r\n global.showFolderInList = function () {\r\n var currentNeedToShow = WA.CR.objectList.isShowFolders();\r\n var currentFolderID = WA.current.getID();\r\n\r\n WA.SRV.call(\"/Session.asmx/UpdateShowFoldersInList\", {\r\n FolderID: currentFolderID,\r\n NeedToShow: !currentNeedToShow\r\n }).success(function (result) {\r\n WA.CR.objectList.setIsShowFolders(!currentNeedToShow);\r\n WA.CR.objectList.loadFolderContent(currentFolderID);\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Событие создания пункта контекстного меню \"Показать/скрыть папки в списке\".\r\n * @function Core.contextmenu.showFolderInList\r\n * @since 5.5.0.9000\r\n * @return {Core.contextmenu}\r\n */\r\n global.showFolderInListOnCreate = function () {\r\n var isShowFolders = WA.CR.objectList.isShowFolders();\r\n return {\r\n selected: isShowFolders,\r\n image: isShowFolders ? '/App_Sprites/menu_check.png' : ''\r\n };\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.Core.contextmenu);\r\n","///**\r\n// * Стандартные провайдеры аутентификации. \r\n// * @readonly\r\n// * @global\r\n// * @enum {string} STD_AUTH_PROVIDERS \r\n// * @example \r\n//*/\r\nwindow.STD_AUTH_PROVIDERS = {\r\n WINDOWS: 'windows',\r\n SQL: 'sql',\r\n NOVELL: 'novell',\r\n CURRENT: 'current'\r\n};\r\n\r\n///**\r\n// * Варианты результата аутентификации. \r\n// * @readonly\r\n// * @global\r\n// * @enum {string} AUTH_REQUEST_RESULT \r\n// * @example \r\n//*/\r\nwindow.AUTH_REQUEST_RESULT = {\r\n DONE: 0,\r\n CHANGE_DEFAULT_PASSWOD: 1,\r\n SHOW_LOGON_MESSAGE: 2\r\n};\r\n\r\n/**\r\n* Удялет куку UserStatus после открытия страницы входа, что она не сохранялась при закрытии браузера в режиме сохранения последних открытых вкладок.\r\n*/\r\nfunction RemoveUserStatusCookie() {\r\n //Очищаем cookie со статусом пользователя\r\n if ($.cookie('UserStatus') === 'logout') {\r\n $.cookie('UserStatus', null, { path: '/' });\r\n $.cookie('UserStatus', null, { path: '/pda' });\r\n }\r\n}\r\n\r\n/**\r\n* Проводит аутентификацию пользователя через сервис Authentication.\r\n*/\r\nfunction LoginUser(providerName, userName, userRealm, userPassword, rememberMe, changePasswordCallback, showMessageCallback, showErrorCallback) {\r\n var mobileView = WA.isMobile();\r\n var returnUrl = (new WA.URL()).getParam('ReturnUrl');\r\n \r\n var loginFunc = function () {\r\n WA.services.authenticaion.loginUser(providerName, userName, userRealm, userPassword, rememberMe,\r\n function (res) {\r\n switch (res.Result) {\r\n case AUTH_REQUEST_RESULT.CHANGE_DEFAULT_PASSWOD:\r\n //Необходимо сменить пароль\r\n if (changePasswordCallback)\r\n changePasswordCallback(res.Warning);\r\n break;\r\n\r\n case AUTH_REQUEST_RESULT.SHOW_LOGON_MESSAGE:\r\n //Отображаем сообщение о входе\r\n if (showMessageCallback)\r\n showMessageCallback(res.Warning);\r\n break;\r\n\r\n default:\r\n //Вход успешен, переходим на страницу по умолчанию, либо returnUrl\r\n window.location.href = (returnUrl == '') ? g_defaultPage : returnUrl;\r\n }\r\n }, function (res) {\r\n //Аутентификация завершилась ошибкой\r\n if (showErrorCallback)\r\n showErrorCallback(res.Error);\r\n });\r\n };\r\n\r\n if (providerName == STD_AUTH_PROVIDERS.CURRENT) {\r\n //Пользователь уже аутентифицирован, можно просто перейти на страницу по умолчанию, либо returnUrl\r\n window.location.href = (returnUrl == '') ? g_defaultPage : returnUrl;\r\n } else {\r\n if (mobileView) {\r\n loginFunc();\r\n } else {\r\n WA.AgentInit.done(function () {\r\n loginFunc();\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n* Изменяет пароль пользователя.\r\n*/\r\nfunction ChangeUserPassword(providerName, userName, oldPassword, newPassword, confirmPassword, isFirstLogin, successCallback, showErrorCallback) {\r\n WA.services.authenticaion.changePassword(userName, oldPassword, newPassword, confirmPassword, isFirstLogin,\r\n function (res) {\r\n if (successCallback)\r\n successCallback(res.Warning);\r\n }, function (res) {\r\n if (showErrorCallback)\r\n showErrorCallback(res.Error);\r\n }); \r\n}","'use strict';\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с задачами и заданиями.\r\n * @namespace Core.customWorks\r\n * @since 5.5.0.2201\r\n */\r\n global.customWorks = {};\r\n})(window.Core);\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Отобразить диалог назначения прав доступа на вложения.\r\n *\r\n * @global\r\n * @function showAccessRightsDialog\r\n * @param {string} maxRights Максимально доступные права для назначения.\r\n * @param {object} buttonHandlers Ассоциативный массив обработчиков событий нажатия на кнопку.\r\n * @param {string} dialogMessage Информационное сообщение в диалоге.\r\n * @private\r\n */\r\n global.showAccessRightsDialog = (maxRights, buttonHandlers, dialogMessage) => {\r\n // Список возможных вариантов прав доступа и соответствующих\r\n // им кнопок в диалоге\r\n const accessRightButtons = {\r\n View: {\r\n id: 'view_right_btn',\r\n caption: L('VIEWING'),\r\n onClick: buttonHandlers.View,\r\n },\r\n Change: {\r\n id: 'modify_right_btn',\r\n caption: L('MODIFY'),\r\n onClick: buttonHandlers.Change,\r\n },\r\n Full: {\r\n id: 'full_right_btn',\r\n caption: L('FULL'),\r\n onClick: buttonHandlers.Full,\r\n },\r\n };\r\n\r\n let accessRightsDialog = new WA.CMP.dialogs.MessageBox();\r\n for (let accessRightsKey in accessRightButtons) {\r\n const buttonModel = accessRightButtons[accessRightsKey];\r\n accessRightsDialog.addButton(buttonModel.id, buttonModel.caption, buttonModel.onClick);\r\n if (accessRightsKey === maxRights) {\r\n break;\r\n }\r\n }\r\n accessRightsDialog\r\n .addButton('ignore_button', L('IGNORE'), buttonHandlers.Ignore)\r\n ._setDefaultButton('view_right_btn');\r\n\r\n // Установить доступность кнопок\r\n accessRightsDialog.isShowCancelButton = true;\r\n accessRightsDialog.isShowOkButton = false;\r\n\r\n accessRightsDialog.showQuestion(\r\n L('WARN_ASSIGN_TASK_ATTACHMENTS_RIGHTS_DLG_CAPTION'),\r\n dialogMessage,\r\n L('ACCESS_RIGHTS'),\r\n );\r\n };\r\n\r\n /**\r\n * Установить доступность кнопок на ленте для задач и заданий.\r\n * @since 5.5.2201\r\n */\r\n global.bindButtonsEnabling = (textAreaSelector) => {\r\n WA.ready(() => {\r\n const buttonNames = [ 'Save' ];\r\n // Флаг, указывающий необходимость осуществления блокировки кнопок не ленте на основе режима доступности\r\n let isControlChangedBefore = false;\r\n\r\n const jTextArea = $(textAreaSelector);\r\n const initialTextAreaValue = jTextArea.val();\r\n jTextArea.unbind('keyup');\r\n jTextArea.bind('keyup', () => {\r\n if (jTextArea.val() !== initialTextAreaValue) {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n if (!isControlChangedBefore) {\r\n Core.cards.setButtonsEnablingOnEnabledMode();\r\n isControlChangedBefore = true;\r\n }\r\n }\r\n });\r\n // Установить изменение доступности при изменении списка вложений.\r\n const jAttachments = $('.ListRequisite');\r\n jAttachments.change(() => {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n if (!isControlChangedBefore) {\r\n Core.cards.setButtonsEnablingOnEnabledMode();\r\n isControlChangedBefore = true;\r\n }\r\n });\r\n // Установить изменение состояний на основе выделения списка вложений\r\n jAttachments.on('itemChecked', () => {\r\n const buttons = WA.CR.toolBar.buttons.getButtonsEnabledOnAttachmentSelection();\r\n const selectedItems = WA.CR.objectList.getSelectedItems();\r\n if (selectedItems.length) {\r\n buttons.forEach((button) => {\r\n // В зависимости от состояния ЗЗУ\r\n switch (WA.CR.State) {\r\n case WORK_STATE.RUNNING:\r\n case WORK_STATE.CONTROLLED:\r\n case WORK_STATE.CONTINUED:\r\n if (button.getIsEnabledOnRunning()) {\r\n button.enable();\r\n }\r\n break;\r\n case WORK_STATE.DONE:\r\n if (button.getIsEnabledOnDone()) {\r\n button.enable();\r\n }\r\n break;\r\n case WORK_STATE.ABORTED:\r\n if (button.getIsEnabledOnAborted()) {\r\n button.enable();\r\n }\r\n break;\r\n }\r\n });\r\n } else {\r\n buttons.forEach((button) => {\r\n button.disable();\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n})(window.Core.customWorks);\r\n","'use strict';\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с задачами.\r\n * @namespace Core.tasks\r\n * @since 5.5.0.2201\r\n */\r\n global.tasks = {};\r\n})(window.Core);\r\n\r\n(function (global) {\r\n\r\n /**\r\n * Инициализация кнопки выбора ТМ в поле маршрута.\r\n * @since 5.5.0.1000\r\n */\r\n global.initSelectStandardRouteButton = function () {\r\n var jRoute = $('#CardContrrolRoute');\r\n if (jRoute.length === 0) {\r\n // Когда ТМ выбран будет другой контрол.\r\n jRoute = $('#CardContrrolStandartRoute');\r\n }\r\n jRoute = jRoute.closest('.reference_requisite');\r\n\r\n var jAdditionalIcons = jRoute.find('.Req_AdditionalIcons');\r\n \r\n if (!jAdditionalIcons.children('.task-card__select-standard').length) {\r\n\r\n var jSelectStandardRoute = $('

    ');\r\n\r\n if (WA.CR.State !== WORK_STATE.INIT) {\r\n // У стартованной задачи нельзя поменять ТМ -- убираем кнопку\r\n jSelectStandardRoute.parent().remove();\r\n } else {\r\n jSelectStandardRoute.on('click', function () {\r\n ChangeStandartRoute();\r\n });\r\n\r\n // Удаляем все иконки внутри, т.к. они бесполезны с данным справочником (ТМ).\r\n jAdditionalIcons.find('p').remove();\r\n\r\n // Добавляем новую иконку для выбор ТМ.\r\n jAdditionalIcons\r\n .append(jSelectStandardRoute)\r\n .show();\r\n }\r\n }\r\n\r\n return global;\r\n };\r\n\r\n /**\r\n * Отписаться от событий изменения jQuery-контролов.\r\n *\r\n * @function unbindButtonsEnabling\r\n * @memberOf Core.tasks\r\n * @since 5.7.0\r\n */\r\n global.unbindButtonsEnabling = () => {\r\n const inputsWithBindings = $('.card-tab-container__main').find('input').not('.refField');\r\n if (inputsWithBindings) {\r\n inputsWithBindings.unbind('change keyup');\r\n }\r\n };\r\n\r\n /**\r\n * Установить доступность кнопок на ленте для задач.\r\n * @since 5.5.0.2201\r\n */\r\n global.bindButtonsEnabling = function () {\r\n if (!WA.CR.IsNew) {\r\n var toolBarButtons = WA.CR.toolBar.buttons;\r\n var isBindNeeded = !(toolBarButtons.isExist('TaskChange') && !toolBarButtons.TaskChange.isSelected());\r\n if (isBindNeeded) {\r\n Core.customWorks.bindButtonsEnabling('textarea.Card_Task_EditText');\r\n\r\n var toolBarButtonNames = ['TaskHighImp', 'TaskLowImp'];\r\n var enableButtonNames = ['Save'];\r\n toolBarButtonNames.forEach(function (buttonName) {\r\n var toolBarButton = toolBarButtons[buttonName];\r\n if (toolBarButton) {\r\n toolBarButton.bind('click', function () {\r\n Core.cards.enableButtonsOnFormChange(enableButtonNames);\r\n });\r\n }\r\n });\r\n\r\n const inputsWithBindings = $('.card-tab-container__main').find('input').not('.refField');\r\n inputsWithBindings.one('change keyup', function() {\r\n Core.cards.enableButtonsOnFormChange(enableButtonNames);\r\n });\r\n }\r\n }\r\n\r\n return global;\r\n };\r\n\r\n})(window.Core.tasks);\r\n","\r\n(function (global) {\r\n\r\n /**\r\n * Функции реализующие логику страниц\r\n * @namespace Core.pages\r\n * @since 5.2.0.1200\r\n */\r\n global.pages = {}\r\n})(window.Core);","\"use strict\";\r\n(function (global) {\r\n\r\n var waitIntervalID = 0;\r\n var selectedProvider;\r\n var defaultRealm;\r\n var jLogin,\r\n jPassword,\r\n jRealm,\r\n jRealmBlock,\r\n jChangePasswordBlock,\r\n jChangePasswordLink,\r\n jWinAuthLogin,\r\n jChangePasswordLabel,\r\n jLoginLabel,\r\n jDefaultRealm,\r\n jProviders,\r\n jError,\r\n jLoginContainer,\r\n jAdvancedSettingsContainer;\r\n\r\n\r\n /**\r\n * Логика страницы входа веб-доступа\r\n * @namespace Core.pages\r\n * @since 5.2.0.1200\r\n */\r\n global.login = {\r\n\r\n init: function () {\r\n InitHoverForButtons();\r\n RemoveUserStatusCookie();\r\n log.debug('LOGIN','LoginPage initialization');\r\n\r\n this.initInputsFocus();\r\n this.initDomObjects();\r\n this.bindInputHandlers();\r\n this.onAuthenticationProviderChange($('#ProviderList'));\r\n this.detectAutomatedTesting();\r\n log.debug('LOGIN', 'LoginPage initialized'); \r\n },\r\n\r\n detectAutomatedTesting: () => {\r\n if (location.search.indexOf('autotest') > 0) {\r\n localStorage.setItem('autotest', 'true');\r\n } else {\r\n localStorage.removeItem('autotest');\r\n }\r\n },\r\n\r\n /**\r\n * Выбираем куда поставить фокус при загрузке. На поле с паролем или на поле\r\n * с логином.\r\n */\r\n initInputsFocus: function () {\r\n var login = $(\"#LoginTextBox\");\r\n try {\r\n if (login.val() != \"\") {\r\n $(\"#PasswordTextBox\").focus();\r\n } else {\r\n login.focus();\r\n }\r\n } catch (ex) {\r\n //Глушим. \r\n };\r\n },\r\n\r\n /**\r\n * Закшируем все объекты раз и до конца.\r\n * @global\r\n * @function initDomObjects \r\n */\r\n initDomObjects: function () {\r\n // jRealmBlock = $(\"#realmBlock\");\r\n // //jDefaultRealmBlock = $(\"#defaultRealmBlock\");\r\n jDefaultRealm = $(\"#DefaultRealmValue\");\r\n jProviders = $(\"#ProviderList\");\r\n // jChangePasswordBlock = $(\"#changePaswordBlock\");\r\n // jChangePasswordLink = $('#ChangePasswordLink'); \r\n // jWinAuthLogin = $('#WinAuthLogin');\r\n jLogin = $('#LoginTextBox');\r\n jPassword = $('#PasswordTextBox');\r\n jRealm = $(\"#RealmTextBox\");\r\n jChangePasswordLabel = $('.forchangepwd');\r\n jLoginLabel = $('.forlogin');\r\n jAdvancedSettingsContainer = $(\"#advancedSettingsContainer\");\r\n jError = $('#login_error');\r\n jLoginContainer = $('#login_container');\r\n },\r\n\r\n /**\r\n * Навешиваем обработчки пользовательского ввода\r\n * @global\r\n * @function bindInputHandlers\r\n */\r\n bindInputHandlers: function () {\r\n if (jProviders.find(\"option[value='\" + STD_AUTH_PROVIDERS.WINDOWS + \"']\").length !== 0) {\r\n jLogin.bind('keypress keyup', this.processUserName);\r\n if (WA.ENV.isAndroid()) jLogin.bind('change', this.processUserName);\r\n };\r\n },\r\n\r\n /**\r\n * Показать дополнительные параметры\r\n */\r\n toggleAdvancedSettings: function (el) {\r\n if ($(el).hasClass(\"disabled\")) return;\r\n //$('#advancedSettingsContainer').slideToggle('fast');\r\n var height = 140;\r\n $('#advancedSettings').hide('fast');\r\n \r\n $('#advancedSettingsContainer').css({ visibility: \"visible\" }).animate(\r\n { height: height, opacity: 1.0},\r\n { duration: 'normal' });\r\n $('#defaultRealmRow').animate(\r\n { height: 0, margin: 0, opacity: 1.0},\r\n { duration: 'normal' });\r\n },\r\n\r\n /**\r\n * Оправка формы по Enter-у\r\n */\r\n formSubmit: function (event) {\r\n try {\r\n var isLoginDisabled = ($(\"#LoginTextBox\").attr('disabled') == \"disabled\");\r\n var charCode = (event.which) ? event.which : window.event.keyCode;\r\n if (charCode == 13) {\r\n if (isLoginDisabled) {\r\n document.getElementById('ChangePasswordButton').onclick();\r\n } else {\r\n document.getElementById('LoginButton').onclick();\r\n }\r\n return false;\r\n }\r\n } catch (e) { };\r\n }, \r\n\r\n /**\r\n * Обновляем интерфейс при смене типа аутентификации пользователем.\r\n */\r\n onAuthenticationProviderChange: function (el) {\r\n var type = el.val();\r\n selectedProvider = type;\r\n\r\n var credentials = g_userCredentials[selectedProvider];\r\n if (credentials) {\r\n var loginField = credentials[\"http://schemas.comp.npo/ws/2015/user/credentials/name\"];\r\n var passwordField = credentials[\"http://schemas.comp.npo/ws/2015/user/credentials/password\"];\r\n var realmField = credentials[\"http://schemas.comp.npo/ws/2015/user/credentials/realm\"];\r\n var enteredLogin = $(\"#LoginTextBox\").val();\r\n \r\n\r\n if (loginField) {\r\n $(\"#loginRow\").show();\r\n $(\"#LoginTextBox\").val(enteredLogin);\r\n $(\"#loginLabel\").text(loginField.caption);\r\n } else {\r\n $(\"#loginRow\").hide();\r\n }\r\n\r\n if (passwordField) {\r\n $(\"#passwordRow\").show();\r\n //$(\"#PasswordTextBox\").val('');\r\n $(\"#passwordLabel\").text(passwordField.caption);\r\n } else {\r\n $(\"#passwordRow\").hide();\r\n }\r\n\r\n if (realmField) {\r\n $(\"#defaultRealmRow\").show();\r\n $(\"#DefaultRealmValue\").val(realmField.value);\r\n $(\"#defaultRealmLabel\").text(realmField.caption);\r\n defaultRealm = realmField.value;\r\n\r\n $(\"#realmRow\").show();\r\n $(\"#RealmTextBox\").val(realmField.value);\r\n $(\"#realmLabel\").text(realmField.caption);\r\n } else {\r\n $(\"#realmRow\").hide();\r\n $(\"#defaultRealmRow\").hide();\r\n }\r\n\r\n $(\"#LoginTextBox\").attr('disabled', false);\r\n $(\"#PasswordTextBox\").attr('disabled', false);\r\n $(\"#RealmTextBox\").attr('disabled', false);\r\n } else {\r\n $(\"#LoginTextBox\").attr('disabled', true);\r\n $(\"#PasswordTextBox\").attr('disabled', true);\r\n $(\"#RealmTextBox\").attr('disabled', true);\r\n\r\n var authenticatedUserName = $(\"#AuthenticatedUserName\").val();\r\n if (authenticatedUserName != \"\") {\r\n $(\"#LoginTextBox\").val(authenticatedUserName);\r\n this.showMessageOnLogin(L('THIRD_PARTY_PASSTHROUGH_AUTHENTICATION_CONFIGURED'), MESSAGE_TYPE.INFO);\r\n }\r\n }\r\n\r\n if (selectedProvider == STD_AUTH_PROVIDERS.SQL) {\r\n $(\"#changePaswordBlock\").show();\r\n $(\"#ChangePasswordLink\").removeClass('hidden');\r\n } else {\r\n $(\"#changePaswordBlock\").hide();\r\n $(\"#ChangePasswordLink\").addClass('hidden');\r\n }\r\n },\r\n\r\n /**\r\n * Отображает сообщение при входе пользователя.\r\n */\r\n showLogonMessage: function (msg) {\r\n $(function () {\r\n try { $(\"select\").focus(); } catch (ex) { };\r\n\r\n if ($('#modal').length == 0)\r\n $(\"form#LoginForm\").append(\"\")\r\n\r\n var $dialog = $(\"#modal\")\r\n .html(msg)\r\n .dialog({\r\n resizable: false,\r\n modal: true,\r\n autoOpen: true,\r\n title: L(\"INFO\"),\r\n width: 380,\r\n buttons:\r\n [\r\n {\r\n text: L(\"OK\"),\r\n click: function () {\r\n window.location.reload();\r\n }\r\n }\r\n ]\r\n });\r\n });\r\n InitMouseEvents();\r\n },\r\n\r\n /**\r\n * Отображает сообщение об успешной смене пароля.\r\n */\r\n showChangePasswordMessage: function (firstMsg, firstLogin, msg) {\r\n var me = this;\r\n\r\n //Данный код отображает тултип вместо окна диалога\r\n //$('#PasswordTextBox').val($('#NewPasswordTextBox').val());\r\n //HideTopSpinner(L(\"USER_PASSWORD_WAS_CHANGED_SUCCESSFULLY\"), 2000);\r\n //me.loginUser();\r\n //me.showLoginForm();\r\n //return false;\r\n\r\n $(document).ready(function () {\r\n try { $(\"select\").focus(); } catch (ex) { };\r\n\r\n if ($('#modal').length == 0)\r\n $(\"form#LoginForm\").append(\"\")\r\n\r\n var $dialog = $(\"#modal\")\r\n .html(msg)\r\n .dialog({\r\n resizable: false,\r\n modal: true,\r\n autoOpen: true,\r\n title: L(\"INFO\"),\r\n width: 360,\r\n buttons:\r\n [\r\n {\r\n text: L(\"OK\"),\r\n click: function () {\r\n if (firstMsg == 'False' && firstLogin == 'True') {\r\n $('#LoginUser').attr('disabled', true);\r\n var buttonSet = $('.ui-dialog').find('.ui-dialog-buttonset');\r\n buttonSet.find('button').attr('disabled', true);\r\n buttonSet.prepend('');\r\n $('#PasswordTextBox').val($('#NewPasswordTextBox').val());\r\n me.loginUser();\r\n me.showLoginForm();\r\n } else {\r\n if (firstMsg == 'False' && firstLogin == 'False') {\r\n $('#PasswordTextBox').val('');\r\n $('#NewPasswordTextBox').val('')\r\n $('#ConfirmPasswordTextBox').val('')\r\n me.showLoginForm();\r\n }\r\n $(this).dialog(\"close\");\r\n }\r\n }\r\n }\r\n ]\r\n });\r\n });\r\n InitMouseEvents();\r\n },\r\n\r\n ///**\r\n //* Поиск информации о домене в имени пользователя\r\n //* @innner\r\n //* @function findDomain\r\n //* @return {object}\r\n //*/\r\n //findDomain: function (text, separator) {\r\n // var hasDomain = false,\r\n // connectionString,\r\n // userName,\r\n // domain;\r\n\r\n // if (text.indexOf(separator) !== -1) {\r\n // connectionString = text.split(separator);\r\n // userName = connectionString[1];\r\n // domain = connectionString[0];\r\n // hasDomain = true;\r\n // };\r\n\r\n // return {\r\n // \"hasDomain\": hasDomain,\r\n // \"userName\": userName,\r\n // \"domain\": domain\r\n // };\r\n //},\r\n\r\n /**\r\n * Обработка домена в строке с именем пользователя\r\n * @global \r\n * @function processUserName\r\n */\r\n processUserName: function () {\r\n var findDomain = function (text, separator) {\r\n var hasDomain = false,\r\n connectionString,\r\n userName,\r\n domain;\r\n\r\n if (text.indexOf(separator) !== -1) {\r\n connectionString = text.split(separator);\r\n userName = connectionString[1];\r\n domain = connectionString[0];\r\n hasDomain = true;\r\n };\r\n\r\n return {\r\n \"hasDomain\": hasDomain,\r\n \"userName\": userName,\r\n \"domain\": domain\r\n };\r\n }\r\n\r\n if (selectedProvider == STD_AUTH_PROVIDERS.WINDOWS) {\r\n var userName = $(this).val();\r\n var separators = ['\\\\'];\r\n\r\n for (var separator in separators) {\r\n var domainInfo = findDomain(userName, separators[separator]);\r\n if (domainInfo.hasDomain) {\r\n jDefaultRealm.val(domainInfo.domain);\r\n jRealm.val(domainInfo.domain);\r\n } else {\r\n //Меняем домен на значение по умолчанию, только если текущее значение не было изменено пользователем.\r\n if (jDefaultRealm.text() == jRealm.val()) {\r\n jDefaultRealm.val(defaultRealm);\r\n jRealm.val(defaultRealm);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Отображает сообщение на страница входа пользователя.\r\n * @global\r\n * @function showMessageOnLogin \r\n */\r\n showMessageOnLogin: function (msg, type) {\r\n if (jError.length == 0) {\r\n jError = $('
    ');\r\n jLoginContainer.append(jError);\r\n }\r\n\r\n if (msg) {\r\n jError.html(msg).show();\r\n if (type == MESSAGE_TYPE.INFO) {\r\n jError.addClass('login__error_type_notification');\r\n } else {\r\n jError.removeClass('login__error_type_notification');\r\n }\r\n } else {\r\n jError.hide().text('');\r\n }\r\n },\r\n\r\n /**\r\n * Скрывает сообщение на страница входа пользователя.\r\n * @global\r\n * @function hideMessageOnLogin \r\n */\r\n hideMessageOnLogin: function () {\r\n this.showMessageOnLogin('');\r\n },\r\n\r\n /**\r\n * Если была нажата ссылка \"изменить пароль\", показываем форму смены пароля.\r\n * @global\r\n * @function ShowPasswordChangeForm \r\n */\r\n showPasswordChangeForm: function (firstLogin) {\r\n jAdvancedSettingsContainer.hide();\r\n jChangePasswordLabel.removeClass('hidden');\r\n jLoginLabel.addClass('hidden');\r\n //Очищаем поле пароля, игнорируем первый вход (т.е. пароль по умолчанию, которого сейчас нет)\r\n jPassword.val('');\r\n $(\"#defaultRealmRow\").hide(); \r\n jLogin.attr('disabled', true);\r\n jLogin.attr('readonly', true).addClass('react-input__field_disabled');\r\n //if (firstLogin == 'True') {\r\n // jLogin.attr('readonly', true).css('color', '#808080');\r\n // jPassword.parent().hide();\r\n //}\r\n $('#IsFirstLogin').val(firstLogin);\r\n $('#login_error').hide();\r\n return false;\r\n },\r\n\r\n /**\r\n * После успешной смены пароля, а также при нажатии на кнопку \"Отмена\"\r\n * восстанавливается форма логина.\r\n * @global\r\n * @function ShowLoginForm \r\n */\r\n showLoginForm: function () {\r\n jAdvancedSettingsContainer.show();\r\n this.hideMessageOnLogin();\r\n jLoginLabel.not('.novell').removeClass('hidden');\r\n jChangePasswordLabel.addClass('hidden'); \r\n jLogin.attr('readonly', false).removeClass('react-input__field_disabled');\r\n jLogin.attr('disabled', false);\r\n jPassword.parent().show();\r\n return false;\r\n },\r\n\r\n changePassword: function () {\r\n var me = this;\r\n $(\"#ChangePasswordButton\").attr('disabled', true).addClass('disabled');\r\n\r\n ChangeUserPassword($(\"#ProviderList\").val(),\r\n $(\"#LoginTextBox\").val(),\r\n $(\"#PasswordTextBox\").val(),\r\n $(\"#NewPasswordTextBox\").val(),\r\n $(\"#ConfirmPasswordTextBox\").val(),\r\n $(\"#IsFirstLogin\").val(),\r\n function (message) {\r\n $(\"#ChangePasswordButton\").removeAttr('disabled').removeClass('disabled');\r\n me.hideMessageOnLogin();\r\n me.showChangePasswordMessage('False', $(\"#IsFirstLogin\").val(), message);\r\n }, function (message) {\r\n $(\"#ChangePasswordButton\").removeAttr('disabled').removeClass('disabled');\r\n me.showMessageOnLogin(message);\r\n });\r\n\r\n //CallService(\"/Authentication.asmx/ChangePassword\", {\r\n // Login: $(\"#LoginTextBox\").val(),\r\n // PasswordOld: $(\"#PasswordTextBox\").val(),\r\n // PasswordNew: $(\"#NewPasswordTextBox\").val(),\r\n // PasswordConfirm: $(\"#ConfirmPasswordTextBox\").val(),\r\n // IsFirstLogin: $(\"#IsFirstLogin\").val()\r\n //}, function (res) {\r\n // $(\"#ChangePasswordButton\").removeAttr('disabled').removeClass('disabled');\r\n // if (res.Success) {\r\n // me.hideMessageOnLogin();\r\n // me.showChangePasswordMessage('False', $(\"#IsFirstLogin\").val(), res.Warning);\r\n // } else {\r\n // me.showMessageOnLogin(res.Error);\r\n // }\r\n //}\r\n //);\r\n return false;\r\n },\r\n\r\n loginUser: function () {\r\n var me = this;\r\n clearTimeout(waitIntervalID);\r\n $(\"#LoginButton\").attr('disabled', true).addClass('disabled');\r\n waitIntervalID = setTimeout(this.showWait, 800);\r\n\r\n var userRealm = $(\"#RealmTextBox\").val();\r\n if (userRealm == \"\")\r\n userRealm = $(\"#DefaultRealmLabel\").text();\r\n\r\n LoginUser($(\"#ProviderList\").val(), $(\"#LoginTextBox\").val(), userRealm, $(\"#PasswordTextBox\").val(), ($(\"#RememberMeChk:checked\").length == 1),\r\n function (message) {\r\n clearTimeout(waitIntervalID);\r\n me.hideWait();\r\n $(\"#LoginButton\").removeAttr('disabled').removeClass('disabled');\r\n me.showPasswordChangeForm('True');\r\n me.showChangePasswordMessage('True', 'True', message);\r\n }, function (message) {\r\n clearTimeout(waitIntervalID);\r\n me.hideWait();\r\n $(\"#LoginButton\").removeAttr('disabled').removeClass('disabled');\r\n me.showLogonMessage(message);\r\n }, function (message) {\r\n clearTimeout(waitIntervalID);\r\n me.hideWait();\r\n $(\"#LoginButton\").removeAttr('disabled').removeClass('disabled');\r\n me.showMessageOnLogin(message);\r\n });\r\n return false;\r\n },\r\n\r\n showWait: function () {\r\n var loginform = $('#login_form');\r\n loginform.find(\"input, select, span, label, a\").attr('disabled', true).addClass('disabled');\r\n loginform.find(\"clearfix.forlogin\").hide();\r\n $('#ChangePwdLink').addClass('disabled');\r\n loginform.append(\"\");\r\n loginform.find(\".login_wait\").show();\r\n },\r\n\r\n hideWait: function () {\r\n var loginform = $('#login_form');\r\n loginform.find(\".login_wait\").hide().remove();\r\n loginform.find(\".clearfix.forlogin\").show();\r\n $('#ChangePwdLink').removeClass('disabled');\r\n loginform.find(\"input, select, span, label, a\").removeAttr('disabled').removeClass('disabled');\r\n }\r\n };\r\n})(window.Core.pages)","\"use strict\";\r\n(function (global) {\r\n\r\n global.explorer = {\r\n _jMainContainer: null,\r\n _jFilterContainer: null,\r\n _jSpinner: null,\r\n\r\n /**\r\n * Инициализирует проводник.\r\n *\r\n * @method Core.pages.explorer.init\r\n */\r\n init: function () {\r\n var me = this;\r\n\r\n // TODO перенести в текущий объект\r\n InitToolbar();\r\n InitExplorerSidebar();\r\n InitFolderCover();\r\n window.name = 'explorer';\r\n\r\n // Установить текущее состояние для истории, если его еще нет.\r\n me.setCurrentState();\r\n\r\n // Обновление содержимого окна.\r\n WA.history.bind(WA.history.EVENT.CHANGE_STATE, function (state) {\r\n if (state && state.type === 'explorer' && state.folderID) {\r\n me.openFolder(state);\r\n } else {\r\n // Если state не определен - перезагружаем окно.\r\n window.location.reload();\r\n }\r\n });\r\n\r\n me._jMainContainer = $('#main_container .MainContentPlaceHolder');\r\n me._jFilterContainer = $(\"#QFilter\");\r\n me._jSpinner = $('#main_container .explorer-spinner');\r\n\r\n me._initFolderTreeScroll();\r\n me._initExpandFolderTree();\r\n me._bindContentsButtonsEnablingOnItemsSelect(); \r\n },\r\n\r\n /**\r\n * Загружает указанную папку.\r\n *\r\n * @method Core.pages.explorer.openFolder\r\n * @param {object} folder\r\n */\r\n openFolder(folder) {\r\n this._jMainContainer.empty(); \r\n let folderMode = folder.folderMode || window.FOLDER_MODE.NONE;\r\n WA.SRV.request('/Folder.asmx/ContentAsHtml', {\r\n FolderId: folder.folderID,\r\n FolderMode: folderMode\r\n }).done((content) => {\r\n WA.CR.ID = folder.folderID;\r\n\r\n // Скрыть предыдущее сообщение об ошибке\r\n WA.CR.inlineHint.hide();\r\n\r\n // Панель фильтрации\r\n this._jFilterContainer.html(content.Filter);\r\n if (content.FilterJs) {\r\n _exec(content.FilterJs);\r\n }\r\n Core.footer\r\n .initFastSearchFilter()\r\n .initViewSwitchingMenu();\r\n Core.toolBars.objectList.initPreFiltersMenu();\r\n\r\n // Основной контент.\r\n this._jMainContainer.html(content.Main);\r\n if (content.MainJs) {\r\n _exec(content.MainJs);\r\n }\r\n\r\n this._hideSpinner();\r\n\r\n // Выделить узел дерева\r\n if (folder.path) {\r\n WA.CR.folderTree.selectNodeByPath(folder.path);\r\n }\r\n\r\n // Обновить счетчик непрочитанных для текущей папки\r\n WA.CR.folderTree.updateUnreadJobCount(folder.folderID);\r\n\r\n // Заголовок\r\n this.setTitle(folder.title);\r\n\r\n // Применить кастомные стили для обложки\r\n let jRightColumn = $('#right_column');\r\n const hasCoverSelector = 'folder_has_cover';\r\n if (content.HasCover) {\r\n let jCoverFrame = $('#folder_cover_frame');\r\n changeCoverStylesImages(jCoverFrame);\r\n jRightColumn.addClass(hasCoverSelector);\r\n } else {\r\n jRightColumn.removeClass(hasCoverSelector);\r\n }\r\n\r\n let hideButtons = [];\r\n let showButtons = [];\r\n switch (folder.contentType) {\r\n case 'Job':\r\n showButtons.push(WA.CR.toolBar.buttons['MarkAsRead']);\r\n break;\r\n case 'EDocument':\r\n //Если текущая папка допускает в качестве контента только документы, то скрываем кнопку пометить как прочитанное.\r\n hideButtons.push(WA.CR.toolBar.buttons['MarkAsRead']);\r\n break;\r\n case 'ComponentToken':\r\n case 'Task':\r\n //Если текущая папка допускает в качестве контента только варианты запуска, то скрываем кнопки пометить как прочитанное.\r\n hideButtons.push(WA.CR.toolBar.buttons['MarkAsRead']);\r\n break;\r\n default:\r\n showButtons.push(WA.CR.toolBar.buttons['MarkAsRead']);\r\n }\r\n\r\n //Прячем и отображаем необходимые кнопки.\r\n hideButtons.forEach((button) => {\r\n if (!!button)\r\n button.hide();\r\n });\r\n\r\n showButtons.forEach((button) => {\r\n if (!!button)\r\n button.show();\r\n });\r\n\r\n // Удаляем с тулбара действия предыдущей папки и добавляем текущие если есть.\r\n let group = WA.CR.toolBar.groups['TOOLBAR_CONTENTS_ACTIONS_GROUP'];\r\n if (group) {\r\n let buttons = group.getButtons().toArray();\r\n buttons.forEach((button) => {\r\n WA.CR.toolBar.buttons.remove(button.name);\r\n });\r\n let actionsModels = JSON.parse(content.ContentsActions);\r\n\r\n actionsModels.forEach((actionModel) => {\r\n let button = group.createButton({\r\n name: actionModel.name,\r\n text: actionModel.caption,\r\n icon: actionModel.icon,\r\n jsaction: new Function(actionModel.jsAction),\r\n contentsActionEnabledMode: actionModel.contentsActionEnableMode\r\n });\r\n button.setHints(actionModel.hint, actionModel.disabledHint);\r\n if (actionModel.isCaptionVisible) {\r\n button.showCaption();\r\n } else {\r\n button.hideCaption();\r\n }\r\n });\r\n \r\n // Вписать панель действия по размеру окна с учетом прикладных действий\r\n WA.CR.toolBar.resizeToolbar();\r\n \r\n // Установить доступность действий в зависимости от наличия выбранных элементов\r\n this._setContentsButtonsEnabling(0);\r\n this._bindContentsButtonsEnablingOnItemsSelect(); \r\n }\r\n\r\n folder.folderMode = this.getCurrentViewFolderMode();\r\n this.updateOrApplyGridOptions(folder.folderID, folder.folderMode);\r\n InitTooltips();\r\n\r\n // Пересчитать размеры элементов\r\n window.setRealHeightAndWidth();\r\n }).fail((msg) => {\r\n WA.CR.inlineHint.showError(msg);\r\n });\r\n\r\n function _exec(func) {\r\n let f = new Function(func);\r\n setTimeout(function () {\r\n f.apply(window);\r\n }, 10);\r\n }\r\n },\r\n\r\n /**\r\n * Сохраняет или восстанавливает режим отображения папки.\r\n * Восстанавливает сохранённые в localStorage настройки ширин колонок в режиме грида.\r\n * Если настроек нет, создаёт новые со значениями по умолчанию.\r\n * Применяет значения к разметке.\r\n * Возвращает текущий режим отображения папки.\r\n *\r\n * @method Core.pages.explorer.updateOrApplyGridOptions\r\n * @param {number} folderId - ID папки.\r\n * @param {number} [folderMode] - режим отображения папки (см. FOLDER_MODE).\r\n * @returns {number} режим отображения папки (см. FOLDER_MODE).\r\n * @since 5.6.0.9057\r\n */\r\n updateOrApplyGridOptions(folderId, folderMode) {\r\n const localStorageKey = window.FOLDER_GRID.WIDTHS_STORAGE_KEY;\r\n\r\n let gridWidths = JSON.parse(localStorage.getItem(localStorageKey)) || {};\r\n if (!gridWidths[ folderId ]) {\r\n gridWidths[ folderId ] = {};\r\n }\r\n let folderWidths = gridWidths[ folderId ];\r\n\r\n let storedMode = folderWidths[ window.FOLDER_GRID.FOLDER_MODE_KEY ];\r\n if ([ window.FOLDER_MODE.COVER, window.FOLDER_MODE.LIST, window.FOLDER_MODE.GRID ].includes(folderMode)) {\r\n if (!storedMode || storedMode !== folderMode) {\r\n folderWidths[ window.FOLDER_GRID.FOLDER_MODE_KEY ] = folderMode;\r\n localStorage.setItem(localStorageKey, JSON.stringify(gridWidths));\r\n }\r\n } else {\r\n folderMode = storedMode;\r\n }\r\n\r\n // уходим, если режим отображения папки отличен от грида\r\n if (folderMode !== window.FOLDER_MODE.GRID) {\r\n return folderMode;\r\n }\r\n\r\n // будем обрабатывать только объекты вида Документ\r\n let jObjectListItems = $('.object-list-item[kind=EDoc]');\r\n\r\n // подготовить список колонок на основании разметки с сервера\r\n let isLocalStorageOutdated = false;\r\n let jObjectListItemColumns = jObjectListItems.find('.object-list-item__addreq-item');\r\n jObjectListItemColumns.each((index, element) => {\r\n const currentWidth = folderWidths[ $(element).data().name ];\r\n if (!currentWidth) {\r\n folderWidths[ $(element).data().name ] = window.FOLDER_GRID.DEFAULT_COLUMN_WIDTH;\r\n isLocalStorageOutdated = true;\r\n }\r\n });\r\n if (isLocalStorageOutdated) {\r\n localStorage.setItem(localStorageKey, JSON.stringify(gridWidths));\r\n }\r\n\r\n // применить сохранённые ширины к новым объектам\r\n for (let dataName in folderWidths) {\r\n let jObjectListItemColumns = jObjectListItems.find(`[data-name='${dataName}']:not(.grid-cell)`);\r\n if (jObjectListItemColumns.length) {\r\n jObjectListItemColumns\r\n .addClass('grid-cell')\r\n .width(folderWidths[ dataName ])\r\n .resizable({\r\n handles: 'e',\r\n minWidth: window.FOLDER_GRID.MIN_COLUMN_WIDTH,\r\n maxWidth: window.FOLDER_GRID.MAX_COLUMN_WIDTH,\r\n stop: (event, ui) => this._onCellResizeStop(folderId, event, ui),\r\n });\r\n }\r\n }\r\n\r\n return folderMode;\r\n },\r\n\r\n /**\r\n * Обработчик событий измеения размера ячейки грида.\r\n *\r\n * @private\r\n * @param {number} folderId - ID папки.\r\n * @param {object} event - объект события.\r\n * @param {object} ui - объект jQueryUI.\r\n * @since 5.6.0.9061\r\n */\r\n _onCellResizeStop(folderId, event, ui) {\r\n let cellWidth = ui.size.width;\r\n let dataName = ui.element.data().name;\r\n\r\n // сохраним новую ширину в localStorage\r\n let gridWidths = JSON.parse(localStorage.getItem(window.FOLDER_GRID.WIDTHS_STORAGE_KEY)) || {};\r\n if (!gridWidths[ folderId ]) {\r\n gridWidths[ folderId ] = {};\r\n }\r\n let folderWidths = gridWidths[ folderId ];\r\n folderWidths[ dataName ] = cellWidth;\r\n localStorage.setItem(window.FOLDER_GRID.WIDTHS_STORAGE_KEY, JSON.stringify(gridWidths));\r\n\r\n // распространим новую ширину по всей колонке\r\n let jObjectListItems = $('.object-list-item[kind=EDoc]');\r\n let jObjectListItemColumns = jObjectListItems.find(`[data-name='${dataName}']`);\r\n if (jObjectListItemColumns.length) {\r\n jObjectListItemColumns.width(cellWidth);\r\n }\r\n },\r\n\r\n /**\r\n * Устанавливает заголовок текущего окна проводника.\r\n *\r\n * @method Core.pages.explorer.setTitle\r\n * @param {} title\r\n * @returns {}\r\n */\r\n setTitle: function (title) {\r\n window.document.title = title;\r\n var folderTitle = $('.explorer-folder-name');\r\n folderTitle.text(title);\r\n folderTitle.attr('title', title);\r\n },\r\n\r\n /**\r\n * Возвращает заголовок текущего окна проводника.\r\n *\r\n * @method Core.pages.explorer.setTitle\r\n * @returns {}\r\n */\r\n getTitle: function (title) {\r\n return $('.explorer-folder-name').text();\r\n },\r\n\r\n /**\r\n * Обновляет текущий список и узел для текущей папки.\r\n *\r\n * @method Core.pages.explorer.refreshList\r\n */\r\n refreshList: function () {\r\n var me = this;\r\n var id = WA.CR.getID();\r\n WA.CR.objectList.reload().done(function () {\r\n WA.CR.folderTree.updateNodesWithFolder(id);\r\n WA.CR.folderTree.updateUnreadJobCount(id);\r\n });\r\n },\r\n\r\n /**\r\n * Берёт режим отображения папки из разметки, из переключателя #current_view.\r\n *\r\n * @since 5.6.0.9062\r\n * @returns {number} Режим отображения папки из разметки.\r\n */\r\n getCurrentViewFolderMode() {\r\n let jCurrentView = $('#current_view');\r\n if (jCurrentView.length) {\r\n return jCurrentView.data().fmode;\r\n }\r\n\r\n return window.FOLDER_MODE.LIST;\r\n },\r\n\r\n /**\r\n * Устанавливает history state для текущей страницы проводника.\r\n *\r\n */\r\n setCurrentState() {\r\n let folderMode = this.getCurrentViewFolderMode();\r\n\r\n // Не устанавливаем текущее состояние для страниц поиска, чтобы при возвращении назад выполнялся поиск.\r\n if (!history.state && !location.href.toLowerCase().includes('mode=search')) {\r\n let jMainContainer = $('#main_container .MainContentPlaceHolder');\r\n let id = WA.CR.getID();\r\n let title = this.getTitle();\r\n // Если нет контейнера для списка, то значит в режиме папки.\r\n let isCover = jMainContainer.find('.object_contents').length === 0;\r\n // QFilter пустой, если режим \"Только обложка\"\r\n let hasCoverOnly = isCover && $('#QFilter').children().length === 0;\r\n let url = new WA.URL();\r\n let fpath = url.getParam('fpath');\r\n this.updateOrApplyGridOptions(id, folderMode);\r\n\r\n WA.history.replaceState({\r\n type: 'explorer',\r\n folderID: id,\r\n folderMode: folderMode,\r\n title: title,\r\n path: fpath,\r\n isCover: isCover,\r\n hasCoverOnly: hasCoverOnly\r\n }, title, url.asString());\r\n } else if (history.state) {\r\n this.updateOrApplyGridOptions(history.state.folderID, folderMode);\r\n }\r\n },\r\n\r\n /*\r\n * Выполняет быстрый поиск.\r\n * @method Core.pages.explorer.executeQuickSearch\r\n */\r\n executeQuickSearch: function (value) {\r\n // TODO: Произвести запись в клиентскую статистику.\r\n var f = $(\"form:first\");\r\n var url = f.attr('action');\r\n\r\n ShowTopSpinner(L(\"SEARCHING\"));\r\n\r\n url = ChangeParamInURL(url, 'searchname', 'SrchGeneral');\r\n url = ChangeParamInURL(url, 'mode', 'search');\r\n url = RemoveParamInURL(url, 'show');\r\n url = ChangeParamInURL(url, 'value', value);\r\n url = ChangeParamInURL(url, 'sort', '-RANK');\r\n url = ChangeParamInURL(url, 'archival', 'N');\r\n url = RemoveParamInURL(url, 'uid');\r\n url = RemoveParamInURL(url, 'refcode');\r\n url = RemoveParamInURL(url, 'treeitem');\r\n\r\n //Изменям значение критерия \"Текст\" в форме поиска на текущее, чтобы оно было доступно при заполнении критерией из формы в компоненте поиска.\r\n var textCriteriaInput = f.find('input#ctl00_LeftContentPlaceHolder_CurrentSearch_SrchGeneralText');\r\n if (textCriteriaInput)\r\n textCriteriaInput.val(value);\r\n \r\n f.attr('action', url);\r\n f.submit();\r\n },\r\n\r\n /**\r\n * Скрыть область с деревом папки\r\n * @private\r\n */\r\n collapseFolderTree: function () {\r\n $.when(WA.SideBarInit).then(function () {\r\n WA.CR.sideBar.collapse();\r\n });\r\n },\r\n\r\n /**\r\n * Раскрытие области с деревом папки\r\n * @private\r\n */\r\n expandFolderTree: function () {\r\n $.when(WA.SideBarInit).then(function () {\r\n WA.CR.sideBar.expand();\r\n });\r\n },\r\n \r\n /**\r\n * Скрывает спиннер.\r\n * @private\r\n */\r\n _hideSpinner: function () {\r\n var me = this;\r\n me._jMainContainer.show();\r\n me._jSpinner.hide();\r\n },\r\n\r\n /**\r\n * Инициализирует действие раскрытия области с деревом папок.\r\n * @private\r\n */\r\n _initExpandFolderTree: function () {\r\n var me = this;\r\n $(\"#expand_tree_container, .explorer-header__expand-area\").click(function () {\r\n me.expandFolderTree();\r\n });\r\n },\r\n\r\n /**\r\n * Заменяет стандартный скролл у дерево папок.\r\n * @private\r\n */\r\n _initFolderTreeScroll: function () {\r\n $(\"#tree_container\").niceScroll({\r\n cursorcolor: \"#d8dce3\",\r\n cursorwidth: \"6px\",\r\n cursorborder: \"0\",\r\n autohidemode: \"false\",\r\n cursorborderradius: \"0\",\r\n railpadding: { right: 0 }\r\n });\r\n },\r\n\r\n /**\r\n * Инициализирует кнопку отображения папок в списке страницы.\r\n * @private\r\n */\r\n _initShowFolderInList: function () {\r\n\r\n // Инициализирует клик по кнопке Показать/Скрыть папки в списке.\r\n function bindShowFoldersInListClick() {\r\n $(\"#ShowFoldersInList\").bind('click', function () {\r\n var jShowFoldersInListButton = $(\"#ShowFoldersInList\");\r\n var selectedSelector = \"selected\";\r\n var currentFolderID = WA.current.getID();\r\n var currentNeedToShow = !jShowFoldersInListButton.hasClass(selectedSelector);\r\n\r\n WA.SRV.call(\"/Session.asmx/UpdateShowFoldersInList\", {\r\n FolderID: currentFolderID,\r\n NeedToShow: currentNeedToShow\r\n }).success(function (result) {\r\n if (currentNeedToShow) {\r\n jShowFoldersInListButton.addClass(selectedSelector)\r\n WA.CR.objectList.setIsShowFolders(true);\r\n } else {\r\n jShowFoldersInListButton.removeClass(selectedSelector);\r\n WA.CR.objectList.setIsShowFolders(false);\r\n }\r\n WA.CR.objectList.loadFolderContent(currentFolderID);\r\n });\r\n });\r\n };\r\n\r\n bindShowFoldersInListClick();\r\n\r\n WA.current.objectList\r\n .bind('onChange', function (selectedItems, allItems) {\r\n\r\n var jShowFoldersInListButton = $(\"#ShowFoldersInList\");\r\n var selectedSelector = \"selected\";\r\n\r\n if (location.href.toLowerCase().search('mode=search') < 0) {\r\n bindShowFoldersInListClick();\r\n if (WA.CR.objectList.isShowFolders())\r\n jShowFoldersInListButton.addClass(selectedSelector);\r\n else\r\n jShowFoldersInListButton.removeClass(selectedSelector);\r\n } else {\r\n jShowFoldersInListButton.hide();\r\n jShowFoldersInListButton.prev().hide();\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Устанавливает состояние Selected/Unselected кнопок отображения папок в списке страницы.\r\n * @private\r\n */\r\n _setShowFolderInListState: function () {\r\n var jShowFoldersInListButton = $(\"#ShowFoldersInList\");\r\n var selectedSelector = \"selected\";\r\n\r\n if (location.href.toLowerCase().search('mode=search') < 0) {\r\n if (WA.CR.objectList.isShowFolders())\r\n jShowFoldersInListButton.addClass(selectedSelector);\r\n else\r\n jShowFoldersInListButton.removeClass(selectedSelector);\r\n } else {\r\n jShowFoldersInListButton.hide();\r\n jShowFoldersInListButton.prev().hide();\r\n }\r\n },\r\n\r\n /**\r\n * Устанавливает доступность кнопок на ленте при выделении записей в зависимости от режима доступности.\r\n @private \r\n */\r\n _bindContentsButtonsEnablingOnItemsSelect: function () {\r\n WA.CR.objectList.bind('onSelect', (item, checkedItems) => {\r\n let checkedItemsCount = checkedItems.length; \r\n this._setContentsButtonsEnabling(checkedItemsCount); \r\n });\r\n },\r\n /**\r\n * Устанавливает доступность кнопок на ленте при выделении записей в зависимости от режима доступности.\r\n @private \r\n */\r\n _setContentsButtonsEnabling: function (checkedItemsCount) { \r\n let buttonsEnabledOnlyForOneSelected = WA.CR.toolBar.buttons.getButtonsEnabledOnlyForOneSelected();\r\n let buttonssEnabledForMultiSelected = WA.CR.toolBar.buttons.getButtonsEnabledForMultiSelected();\r\n if (checkedItemsCount) {\r\n Object.keys(buttonssEnabledForMultiSelected).forEach((key) => {\r\n buttonssEnabledForMultiSelected[key].enable();\r\n }); \r\n } else {\r\n Object.keys(buttonssEnabledForMultiSelected).forEach((key) => {\r\n buttonssEnabledForMultiSelected[key].disable();\r\n }); \r\n }\r\n if (checkedItemsCount == 1) {\r\n Object.keys(buttonsEnabledOnlyForOneSelected).forEach((key) => {\r\n buttonsEnabledOnlyForOneSelected[key].enable();\r\n }); \r\n } else {\r\n Object.keys(buttonsEnabledOnlyForOneSelected).forEach((key) => {\r\n buttonsEnabledOnlyForOneSelected[key].disable();\r\n }); \r\n } \r\n }\r\n\r\n };\r\n})(window.Core.pages);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с документами.\r\n * @namespace Core.documents\r\n * @since 5.3.0.1000\r\n */\r\n global.documents = {};\r\n})(window.Core);\r\n\r\n(function (global) {\r\n /**\r\n * Массовый экспорт документов\r\n *\r\n * @param {Object[]} documents Список документов\r\n * @since 5.3.0.1000\r\n */\r\n global.massExport = function (documents) {\r\n WA.CR.spinner.showDelayed(400);\r\n loadAvailableTransformations().done(function (transformationValues, transformationIsSuccess) {\r\n var disableTransformation = !transformationIsSuccess;\r\n\r\n var archiveName = '';\r\n var transformationName = '';\r\n var needLock = false;\r\n\r\n documents = $.isArray(documents) ? documents : WA.CR.objectList.getSelectedItems();\r\n\r\n if (documents.length > 0) {\r\n if (typeof documents[0] == 'object') {\r\n var selectedDocuments =\r\n _.filter(documents, function (item) { return item.type == OBJECT_TYPE.EDOCUMENT; });\r\n documents = _.map(selectedDocuments, function (item) { return { id: item.id, name: item.name, tr: item._jObject } });\r\n archiveName = selectedDocuments.length > 0 ? selectedDocuments[0].name + '.zip' : '';\r\n } else if (typeof documents[0] != 'number') {\r\n throw L('ERR_NOT_ALL_REQUIRED_ARGUMENTS_HAVE_BEEN_SUPLIED');\r\n }\r\n }\r\n\r\n\r\n if (documents.length == 1) {\r\n //единичный экспорт\r\n EDocument(documents[0]).Export();\r\n return;\r\n }\r\n\r\n var exportSettings = {\r\n Documents: _.map(documents, function (doc) {\r\n return { DocumentId: doc.id, VersionNumber: 'last', Lock: false }\r\n }),\r\n CompressResult: true,\r\n PackToEsd: false\r\n };\r\n\r\n var massExportVersionAsk = 'ask';\r\n var massExportLockAsk = 'ask';\r\n var massExportLockAll = 'lock';\r\n var formBuilder = new WA.CMP.forms.FormBuilder(\"massexport\");\r\n\r\n formBuilder.addInput('MASS_EXPORT_DEFAULT_ARCHIVE_NAME', null, null, null, archiveName);\r\n\r\n formBuilder.addPick('MASS_EXPORT_MAKE_TRANSFORMATION', transformationValues);\r\n\r\n formBuilder.addRadioButtons('MASS_EXPORT_VERSION', {\r\n 'last': 'MASS_EXPORT_VERSION_LAST',\r\n 'lastactive': 'MASS_EXPORT_VERSION_LAST_ACTIVE',\r\n 'ask': 'MASS_EXPORT_VERSION_ASK'\r\n }, null, 'last');\r\n formBuilder.addRadioButtons('MASS_EXPORT_LOCK', {\r\n 'lock': 'MASS_EXPORT_LOCK_ALL',\r\n 'nolock': 'MASS_EXPORT_WITHOUT_LOCK_ALL',\r\n 'ask': 'MASS_EXPORT_LOCK_ASK'\r\n }, null, 'nolock');\r\n\r\n formBuilder.addCheckbox('MASS_EXPORT_TO_STRUCTURED_DOCUMENT', false);\r\n formBuilder.addCheckbox('EXPORT_WITH_ONLY_APPROVING_SIGNATURE', false);\r\n\r\n var dialog = new WA.CMP.dialogs.BaseDialog();\r\n dialog.setHtml(formBuilder.render());\r\n dialog.title = L('MASS_EXPORT_TITLE');\r\n dialog.isShowOkButton = true;\r\n dialog.isShowCancelButton = true;\r\n\r\n key.setScope('modalwindow');\r\n\r\n dialog.bind('onShow', function () {\r\n if (disableTransformation) {\r\n formBuilder.disable('MASS_EXPORT_MAKE_TRANSFORMATION');\r\n }\r\n $('.primary').focus();\r\n });\r\n\r\n\r\n var showExportResult = function (res) {\r\n return new Promise((resolve) => {\r\n var dialog = new WA.CMP.dialogs.MessageBox();\r\n dialog.width = 600;\r\n var exportFailedDocuments = _.filter(res.Result.DocumentsMassExportResult, function (d) { return !d.Success });\r\n \r\n var messages = _.map(exportFailedDocuments, function (failedDoc) {\r\n var currentDocument = _.first(_.filter(documents, function (d) { return d.id == failedDoc.DocumentId }));\r\n return format('
  • {0} \"{1}\": {2}
  • ',\r\n L('DOCUMENT'),\r\n ('' + currentDocument.name).escapeHtml(),\r\n failedDoc.Result,\r\n (new WA.Link(currentDocument.id, OBJECT_TYPE.EDOCUMENT)).toURL().asString());\r\n });\r\n \r\n if (exportFailedDocuments.length <= 0) {\r\n if (res.Success) {\r\n const toastMsg = new WA.CMP.notifications.Toast();\r\n toastMsg.show(L('MASS_EXPORT_COMFIRMATION'));\r\n }\r\n resolve();\r\n } else {\r\n var details = new WA.CMP.forms.FormBuilder('exportDetails');\r\n details.setOrientation(ORIENTATION.VERTICAL);\r\n details.addTextFrame('MASS_EXPORT_NOT_ALL_DOCUMENTS_EXPORTED_INFORMATION_MESSAGE', '
      ' + messages.join('') + '
    ');\r\n details.renderAsync().done(function (data) {\r\n if (!res.Success || res.Warning) {\r\n dialog.showError(L('MASS_EXPORT_ERROR'), data);\r\n } else {\r\n dialog.showInfo(L('MASS_EXPORT_COMFIRMATION'), data);\r\n }\r\n resolve();\r\n });\r\n }\r\n })\r\n }\r\n\r\n // Функция вызывает метод веб-сервиса экспорта и обрабатывает результат.\r\n var exportDocuments = function (exportSettings, archiveName, transformationName) {\r\n let spinnerDialog = new WA.CMP.dialogs.BaseDialog;\r\n spinnerDialog.isShowOkButton = false;\r\n spinnerDialog.width = 'auto';\r\n spinnerDialog.height = 'auto';\r\n spinnerDialog.closeOnEscape = false;\r\n\r\n // Невидимая кнопка для того, чтобы сработал setScope и нельзя было на клавиатуре по странице гулять.\r\n spinnerDialog.modalWindowButtons.push({\r\n id: 'hiddenButton',\r\n text: '',\r\n click: buttonClick = () => false,\r\n Class: 'dialog_hidden_button',\r\n });\r\n \r\n spinnerDialog.setSpinner(L('PLEASE_WAIT_DONT_CLOSE_PAGE'));\r\n spinnerDialog.setTitle(L('UI_MASS_EXPORT_SPINNER_TITLE'));\r\n spinnerDialog.removeCloseButton();\r\n let needShowSpiner = true;\r\n let lastTimestamp = 0;\r\n\r\n WA.SRV.call('/EDocument.asmx/ExportMultipleDocuments', {\r\n Settings: exportSettings,\r\n ArchiveName: archiveName,\r\n TransformationName: transformationName,\r\n }, null, null, true, true)\r\n .success(function (res, res2) {\r\n needShowSpiner = false;\r\n // Если показали диалог с ожиданиме экспорта, то крутим его минимум 2 секунды.\r\n const spinnerDelay = setSpinnerDialogDelay(lastTimestamp);\r\n setTimeout(() => {\r\n spinnerDialog.close();\r\n showExportResult(res2).then(() => {\r\n if (!res2.Warning) {\r\n location.href = '/Download.ashx?accesstype=private&id=' + res.Result;\r\n }\r\n });\r\n }, spinnerDelay)\r\n }).error(function (res, res2) {\r\n needShowSpiner = false;\r\n // Если показали диалог с ожиданиме экспорта, то крутим его минимум 2 секунды.\r\n const spinnerDelay = setSpinnerDialogDelay(lastTimestamp);\r\n setTimeout(() => {\r\n spinnerDialog.close();\r\n if (res2 && res2.Result) {\r\n showExportResult(res2).then(() => {\r\n const someDocumentsExported = res2.Result.DocumentsMassExportResult.some((r) => r.Success);\r\n if (res2.Result.Success || someDocumentsExported) {\r\n location.href = '/Download.ashx?accesstype=private&id=' + res2.Result.Result;\r\n }\r\n });\r\n } else {\r\n ShowError(L('ERR_CONNECTION_RESET'));\r\n }\r\n }, spinnerDelay);\r\n });\r\n // Если документы экспортировались за секунду, то показывать диалог с ожиданием экспорта не нужно. \r\n setTimeout(() => {\r\n if (needShowSpiner) {\r\n spinnerDialog.show();\r\n lastTimestamp = Date.now();\r\n }\r\n }, 1000);\r\n };\r\n\r\n dialog.ok = function () {\r\n archiveName = formBuilder.getValue('MASS_EXPORT_DEFAULT_ARCHIVE_NAME');\r\n transformationName = formBuilder.getValue('MASS_EXPORT_MAKE_TRANSFORMATION');\r\n needLock = formBuilder.getValue('MASS_EXPORT_LOCK');\r\n\r\n exportSettings.PackToEsd = formBuilder.getValue('MASS_EXPORT_TO_STRUCTURED_DOCUMENT');\r\n exportSettings.OnlyApprovingSignaturesType = formBuilder.getValue('EXPORT_WITH_ONLY_APPROVING_SIGNATURE');\r\n\r\n var versionFromForm = formBuilder.getValue('MASS_EXPORT_VERSION');\r\n \r\n let confirmationDialog = new WA.CMP.dialogs.BaseDialog;\r\n confirmationDialog.isShowOkButton = true;\r\n confirmationDialog.isShowCancelButton = true;\r\n confirmationDialog.height = 'auto';\r\n confirmationDialog.height = 'auto';\r\n confirmationDialog.enterOk = true;\r\n confirmationDialog.closeOnEscape = true;\r\n confirmationDialog.okText = L('CONTINUE');\r\n confirmationDialog.setTitle(L('CONFIRMATION'));\r\n confirmationDialog.setHtml(L('UI_MASS_EXPORT_TRANSFORMATION_MESSAGE'));\r\n confirmationDialog.bind(WebAccess.components.dialogs.BaseDialog.EVENT.AFTER_CLOSE_BY_OK, () => {\r\n requestAnimationFrame(() => {\r\n exportDocuments(exportSettings, archiveName, transformationName);\r\n });\r\n }); \r\n\r\n if (versionFromForm == massExportVersionAsk || needLock == massExportLockAsk) {\r\n if (versionFromForm != massExportVersionAsk) {\r\n var settings = _.map(exportSettings.Documents, function (s) {\r\n return {\r\n DocumentId: s.DocumentId,\r\n VersionNumber: versionFromForm,\r\n Lock: needLock == massExportLockAll\r\n }\r\n });\r\n WA.SRV.callSync('/EDocument.asmx/GetDocumentVersions', {\r\n DocumentMassExportSettings: settings\r\n })\r\n .success(function (res) {\r\n for (var r = 0; r < res.length; r++) {\r\n for (var d = 0; d < exportSettings.Documents.length; d++) {\r\n if (exportSettings.Documents[d].DocumentId == res[r].DocumentId) {\r\n exportSettings.Documents[d].VersionNumber = res[r].VersionNumber;\r\n continue;\r\n }\r\n }\r\n }\r\n })\r\n .error(function (res) { ShowError(res) });\r\n } else {\r\n exportSettings.Documents = _.map(exportSettings.Documents, function (docSetting) {\r\n return {\r\n DocumentId: docSetting.DocumentId,\r\n VersionNumber: 1,\r\n Lock: docSetting.Lock\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Показать диалог выбора версии и блокировки.\r\n *\r\n * @function showDialogForOneDocument\r\n * @param {WA.Link} doc Документ.\r\n * @param {boolean} isLast Требуется для того, чтобы возвращать соответствующий ответ при клике на ok (закрывать или нет диалог).\r\n * @return {Deferred} Объект, с информацией о версии.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n var showDialogForOneDocument = function (doc, isLast) {\r\n var deferred = $.Deferred();\r\n var verNum = _.filter(exportSettings.Documents, function (setting) { return doc.id == setting.DocumentId })[0].VersionNumber;\r\n\r\n ShowModalWindow('export', {\r\n title: format('{0}: {1}', L('EXPORT_DOCUMENT_VERSION'), doc.name),\r\n okText: L('EXPORT'),\r\n afterOpen: function () {\r\n BindHelpIcoClickOnModalWindow('Export');\r\n key.setScope('baseDialog');\r\n },\r\n close: function () {\r\n clearAllModalDivs();\r\n key.setScope('common');\r\n },\r\n ok: function () {\r\n var modal = $('#modal_window');\r\n var exportParam = modal.find('input[type=\"radio\"]:checked');\r\n var version = exportParam.val();\r\n var needBlock;\r\n\r\n if (askLock)\r\n needBlock = modal.find('#lock:checked').length != 0;\r\n else\r\n needBlock = needLock === massExportLockAll;\r\n\r\n deferred.resolve({ DocumentId: doc.id, VersionNumber: version, Lock: needBlock });\r\n\r\n return isLast;\r\n },\r\n cancel: function () {\r\n deferred.resolve(doc.id);\r\n\r\n return isLast;\r\n },\r\n params: {\r\n EDocID: doc.id,\r\n ShowLock: askLock,\r\n VerNumber: verNum,\r\n Mode: 'VIEW',\r\n IsExport: true,\r\n ShowTransformations: false,\r\n ShowToEsd: false\r\n }\r\n });\r\n\r\n return deferred.promise();\r\n }\r\n\r\n var askLock = needLock == massExportLockAsk;\r\n var docSettingAsked = showDialogForOneDocument(documents[0], documents.length === 1 ? true : false);\r\n\r\n var updateExportSettings = function (prevSetting) {\r\n for (var d = 0; d < exportSettings.Documents.length; d++) {\r\n if (exportSettings.Documents[d].DocumentId == prevSetting.DocumentId) {\r\n exportSettings.Documents[d].VersionNumber = prevSetting.VersionNumber;\r\n exportSettings.Documents[d].Lock = prevSetting.Lock;\r\n break;\r\n }\r\n }\r\n };\r\n var removeDocFromExportSettings = function (docId) {\r\n exportSettings.Documents = _.reject(exportSettings.Documents, function (doc) {\r\n return doc.DocumentId == docId;\r\n });\r\n };\r\n\r\n for (var k = 1; k < documents.length; k++) {\r\n (function (doc, isLast) {\r\n docSettingAsked = docSettingAsked.then(function (prevSetting) {\r\n if (_.isObject(prevSetting)) {\r\n updateExportSettings(prevSetting);\r\n } else {\r\n removeDocFromExportSettings(prevSetting);\r\n }\r\n return showDialogForOneDocument(doc, isLast);\r\n });\r\n })(documents[k], documents.length === k + 1);\r\n }\r\n\r\n docSettingAsked.then(function (prevSetting) {\r\n if (_.isObject(prevSetting)) {\r\n updateExportSettings(prevSetting);\r\n } else {\r\n removeDocFromExportSettings(prevSetting);\r\n }\r\n if (transformationName != L('NO') || exportSettings.PackToEsd) {\r\n confirmationDialog.show();\r\n } else {\r\n exportDocuments(exportSettings, archiveName, transformationName);\r\n }\r\n });\r\n }\r\n else {\r\n exportSettings.Documents = _.map(exportSettings.Documents, function (settings) {\r\n settings.Lock = needLock === massExportLockAll;\r\n settings.VersionNumber = versionFromForm;\r\n return settings;\r\n });\r\n if (transformationName || exportSettings.PackToEsd) {\r\n confirmationDialog.show();\r\n } else {\r\n exportDocuments(exportSettings, archiveName, transformationName);\r\n }\r\n }\r\n };\r\n\r\n dialog.show();\r\n // Инициализация ссылки на справку\r\n WA.SRV.call(\"/Session.asmx/GetHelpLink\", {\r\n HelpPageCode: \"5#EXPORT_EDOCUMENT\"\r\n }).success(function (res) {\r\n var exportHelpLink = {\r\n Export: JSON.parse(res)\r\n }\r\n UpdateModalWindowExtHelpLinks(exportHelpLink);\r\n BindHelpIcoClickOnModalWindow('Export');\r\n });\r\n\r\n // Управление состояниями чекбоксов В структурированный документ и Экспортировать только утверждающие подписи\r\n var jExportWithOnlyApprovingSignature = $(\"#export_with_only_approving_signature\");\r\n var jExportToEsd = $(\"#mass_export_to_structured_document\");\r\n jExportToEsd.on(\"change\", function () {\r\n if (!$(this).prop(\"checked\"))\r\n if (jExportWithOnlyApprovingSignature.prop(\"checked\"))\r\n jExportWithOnlyApprovingSignature.prop(\"checked\", false);\r\n });\r\n jExportWithOnlyApprovingSignature.on(\"change\", function () {\r\n if ($(this).prop(\"checked\"))\r\n if (!jExportToEsd.prop(\"checked\"))\r\n jExportToEsd.prop(\"checked\", true);\r\n });\r\n\r\n WA.CR.spinner.hide();\r\n });\r\n };\r\n\r\n /**\r\n * Загружает список доступных преобразований документов.\r\n *\r\n * @function loadAvailableTransformations\r\n * @return {Deferred>} Список доступных преобразований.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n function loadAvailableTransformations() {\r\n var d = $.Deferred();\r\n var values = { '': L('NO') };\r\n\r\n WA.SRV.call('/EDocument.asmx/AvailableTransformations', {}, null, null, true, true).done(function (availableTransformations) {\r\n\r\n Object.assign(values, availableTransformations);\r\n\r\n d.resolve(values, true);\r\n\r\n }).fail(function () {\r\n d.resolve(values, false);\r\n });\r\n\r\n return d;\r\n };\r\n\r\n /**\r\n * Установить доступность кнопок на ленте.\r\n * @since 5.5.2201\r\n */\r\n global.bindButtonsEnabling = function () {\r\n var buttonNames = ['Save', 'SaveAndClose'];\r\n // Флаг, указывающий необходимость осуществления блокировки кнопок не ленте\r\n // на основе режима доступности\r\n var isControlChangedBefore = false;\r\n if (WA.CR.form && WA.CR.form.isExist()) {\r\n Core.cards.bindButtonsEnablingOnFormChange(buttonNames);\r\n } else {\r\n switch (WA.CR.sideBar.tabs.current.name) {\r\n case 'ShowVerList':\r\n $('#main_container').find('[id$=EdocLifeStage]').not('.pickFieldHidden').change(function () {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n if (!isControlChangedBefore) {\r\n Core.cards.setButtonsEnablingOnEnabledMode();\r\n isControlChangedBefore = true;\r\n }\r\n });\r\n break;\r\n case 'RightsList':\r\n $(\".rights-controls\").find('input[type=checkbox]').change(function () {\r\n $('.Rights').trigger('rightsChange');\r\n });\r\n $('.Rights').on('rightsChange', function () {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n if (!isControlChangedBefore) {\r\n Core.cards.setButtonsEnablingOnEnabledMode();\r\n isControlChangedBefore = true;\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n\r\n})(window.Core.documents);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с заданиями.\r\n * @namespace Core.jobs\r\n * @since 5.3.0.1010\r\n */\r\n global.jobs = {};\r\n})(window.Core);\r\n\r\n(function (global) {\r\n /**\r\n * Изменяет статус прочитанности заданий.\r\n * @description Задания помечаются непрочитанными, если все выбранные задания прочитаны. Иначе, все задания помечаются прочитанными.\r\n * @param {List} items Список элменетов, статус прочитанности которых требуется изменить.\r\n */\r\n global.toggleReadStatus = function (items) {\r\n var jobs = _.filter(items, function (e) { return e.type === OBJECT_TYPE.JOB });\r\n var jobIds = _.map(jobs, function (e) { return e.id });\r\n var unreadJobs = _.filter(jobs, function (job) { return job.isUnread(); });\r\n var markAsRead = unreadJobs.length > 0;\r\n\r\n WA.SRV.call('/Job.asmx/MassMarkAsRead', { JobIDList: jobIds, MarkAsRead: markAsRead }).success(function (res) {\r\n var count = -unreadJobs.length;\r\n // Shirobokov_AV: Задания помечаются непрочитанными, если все выбранные задания прочитаны. Иначе, все задания помечаются прочитанными.\r\n if (!markAsRead) {\r\n count = jobs.length;\r\n }\r\n\r\n $.each(jobs, function (i, job) {\r\n if (markAsRead) {\r\n job.removeUnreadStyle();\r\n } else {\r\n job.addUnreadStyle();\r\n }\r\n });\r\n\r\n ChangeUnreadCountInTree(count);\r\n }).error(function (res) {\r\n (new WA.CMP.dialogs.MessageBox()).showError(res);\r\n });\r\n };\r\n \r\n /**\r\n * Сохраняет карточку задания. \r\n * @param {boolean} needClose TRUE если карточка должна быть закрыта, иначе - FALSE.\r\n * @since 5.7.0\r\n */\r\n global.SaveInBaseJob = function (needClose) { \r\n const activeText = $('textarea#CardControl_EditedText').val();\r\n const url = (new WA.URL());\r\n WA.SRV.request('/Job.asmx/Save', {\r\n ActiveText: activeText,\r\n FolderId: url.getParam('opener') || -1,\r\n JobID: WA.CR.ID, \r\n }).done(newModel => {\r\n let model = JSON.parse(newModel);\r\n WA.CR.CardTab.updateModel(model.cardTabModel);\r\n if (needClose) {\r\n WA.CR.window.unbind('beforeClose'); \r\n WA.CR.window.close(); \r\n }\r\n }).fail(errorMessage => {\r\n WA.CR.inlineHint.showError(errorMessage);\r\n });\r\n };\r\n \r\n /**\r\n * Выполняет задание с переданным результатом.\r\n *\r\n * @function Core.jobs.performJob\r\n * @param {number} jobID ИД задания.\r\n * @param {number} performResult Индекс варианта выполнения задания.\r\n * @param {boolean} [needClose = true] TRUE если карточка должна быть закрыта, иначе - FALSE.\r\n * @return {Deferred}\r\n * @since 5.7.0\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.performJob = (jobID, performResult, needClose = true) => {\r\n const d = $.Deferred();\r\n let serviceURl = '/Job.asmx/PerformJob';\r\n let params = { \r\n JobID: jobID, \r\n PerformResult: performResult || 0,\r\n }; \r\n // Если это текущее открытое задание, то получаем текст задания и его тоже передаем в веб-метод для сохранения.\r\n if (jobID === WA.CR.ID) {\r\n const activeText = $('textarea#CardControl_EditedText').val();\r\n params = Object.assign(params, {\r\n ActiveText: activeText || '',\r\n }); \r\n serviceURl = '/Job.asmx/PerformJobWithTextUpdating';\r\n } \r\n WA.SRV.request(serviceURl, params).done(() => {\r\n if (needClose) {\r\n if (opener && opener.WA.getLocation() === 'explorer' && opener.WA.CR.objectList) {\r\n opener.WA.CR.objectList.reload();\r\n }\r\n WA.CR.window.unbind('beforeClose');\r\n WA.CR.window.close();\r\n } \r\n d.resolve(); \r\n }).fail(errorMessage => {\r\n WA.CR.inlineHint.showError(errorMessage);\r\n d.reject(errorMessage);\r\n });\r\n return d.promise();\r\n }\r\n\r\n})(window.Core.jobs)\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с результатами выполнения заданиями.\r\n * @namespace Core.performResults\r\n * @since 5.7.0\r\n */\r\n global.performResults = {};\r\n})(window.Core.jobs);\r\n\r\n(function (global) {\r\n\r\n global.performResultsInit = $.Deferred();\r\n _performResults = {};\r\n \r\n global.init = (performResults) => {\r\n this._performResults = performResults;\r\n global.performResultsInit.resolve();\r\n } \r\n\r\n /**\r\n * Возвращает результат выполнения по коду.\r\n *\r\n * @function Core.jobs.performResults.getByCode\r\n * @param {string} code Код результата выполнения.\r\n * @return {} Результат выполнения.\r\n * @since 5.7.0\r\n */\r\n global.getByCode = (code) => {\r\n return _performResults.find(res => res.Code === code);\r\n }\r\n\r\n /**\r\n * Возвращает все результаты выполнения.\r\n *\r\n * @function Core.jobs.performResults.getAll \r\n * @return {array} Перечень вариантов выполнения задания.\r\n * @since 5.7.0\r\n */\r\n global.getAll = () => {\r\n return _performResults;\r\n }\r\n\r\n})(window.Core.jobs.performResults)\r\n","'use strict';\r\n\r\n/**\r\n * Предоставляет инструменты для работы с Агентом веб-доступа.\r\n * Например, запустить или отключить Агент веб-доступа.\r\n *\r\n * @namespace WebAccess.agent\r\n * @since 5.0.0.4100\r\n */\r\n\r\n(function (global) {\r\n var Agent = global.agentCore.Agent.extend({\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет, включен ли запрет на использование и запуск Агента веб-доступа.\r\n *\r\n * @method WebAccess.agent.isDisabled\r\n * @return {boolean} True – запрет на использование и запуск Агент веб-доступа включен, иначе False.\r\n * @since 5.1.0.1511\r\n */\r\n isDisabled: function () {\r\n var isDisabledValue = WA.cache.getItem('agent.isDisabled');\r\n $.cookie('IsAgentDisabled', isDisabledValue, { expires: 3650 });\r\n return isDisabledValue === '1';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Включает запрет на использование и запуск Агента веб-доступа.\r\n *\r\n * @method WebAccess.agent.disable\r\n * @return {WebAccess.agent} Объект типа agent.\r\n * @since 5.1.0.1511\r\n */\r\n disable: function () {\r\n log.warning('AGENT', 'Agent was manualy disabled');\r\n WA.cache.setItem('agent.isDisabled', '1');\r\n $.cookie('IsAgentDisabled', '1', { expires: 3650 });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отключает запрет на использование и запуск Агента веб-доступа.\r\n *\r\n * @method WebAccess.agent.enable\r\n * @return {WebAccess.agent} Объект типа agent.\r\n * @since 5.1.0.1511\r\n */\r\n enable: function () {\r\n log.info('AGENT', 'Agent was manualy enabled');\r\n WA.cache.setItem('agent.isDisabled', '0');\r\n $.cookie('IsAgentDisabled', '0', { expires: 3650 });\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Определяет, сохранено ли в кэше значение о запрете на использование и запуск Агента веб-доступа.\r\n *\r\n * @method WebAccess.agent.isDisableSetted\r\n * @return {boolean} True – значение в кэше сохранено, иначе False.\r\n * @since 5.4.0.1037\r\n */\r\n isDisableSetted: function () {\r\n return WA.cache.getItem('agent.isDisabled') !== null;\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.isAvailable\r\n */\r\n isAvailable: function () {\r\n return this.canUseInCurrentDevice() && !this.isDisabled();\r\n },\r\n\r\n /**\r\n * Проверяет, доступен ли Агент веб-доступа. В случае недоступности выводит сообщение.\r\n * \r\n * @method WebAccess.agent.checkAvailable\r\n * @return {boolean} True – Агент веб-доступа доступен для работы, иначе False.\r\n * @since 5.7.0\r\n */\r\n checkAvailability() {\r\n if (!this.isAvailable()) { \r\n ShowInfo(L('AGENT_NEED_ENABLE_FOR_EXECUTE'));\r\n return false;\r\n }\r\n return true;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Проверяет, возможно ли использование Агента веб-доступа на данном устройстве.\r\n *\r\n * @method WebAccess.agent.canUseInCurrentDevice\r\n * @return {boolean} True – использование Агента веб-доступа возможно, иначе False.\r\n *\r\n * @example\r\n * if (WebAccess.agent.canUseInCurrentDevice()) {\r\n * alert('Использование Агента веб-доступа на данном устройстве возможно.');\r\n * };\r\n */\r\n canUseInCurrentDevice: function () {\r\n var isARM = WA.ENV.ua.toLowerCase().search(/arm/) >= 0;\r\n var isBlackberry = WA.ENV.os.name === \"BlackBerry\";\r\n return !WA.ENV.isAndroid() && !WA.ENV.isIOS() && !isARM && !isBlackberry && !localStorage.getItem('autotest');\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n\r\n /**\r\n * Проверяет, что сессия Агента веб-доступа инициализирована.\r\n *\r\n * @method WebAccess.agent.isSessionInitialized\r\n * @return {boolean} True – сессия Агента веб-доступа инициализирована, иначе False.\r\n * @since 5.1.0.1511\r\n */\r\n isSessionInitialized: function () {\r\n return $.cookie('IsAgentSessionInitialized') === '1';\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает признак инициализации сессии Агента веб-доступа.\r\n *\r\n * @param {Boolean} value Устанавливаемое значение\r\n * @method WebAccess.agent.setSessionInitialized\r\n * @return {WebAccess.agent} Объект типа agent.\r\n * @since 5.1.0.1511\r\n */\r\n setSessionInitialized: function (value) {\r\n log.info('AGENT', 'Setting IsAgentSessionInitialized cookie with value: ' + value);\r\n $.cookie('IsAgentSessionInitialized', value ? '1' : '0');\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Отображает состояние агента.\r\n *\r\n * @method WebAccess.agent._showState\r\n * @return {WebAccess.agent}\r\n * @since 5.1.0.1532\r\n * @private\r\n */\r\n _showState: function () {\r\n log.debug('AGENT', '------------ AGENT STATE --------------');\r\n log.debug('AGENT', 'web.config enabled: ' + g_IsAgentEnabled);\r\n log.debug('AGENT', 'isDisabled: ' + WA.agent.isDisabled());\r\n log.debug('AGENT', 'isSessionInitialized: ' + WA.agent.isSessionInitialized());\r\n log.debug('AGENT', '---------------- END -----------------');\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.isPluginAvailable\r\n */\r\n isPluginAvailable: function (pluginName) {\r\n return this._super(pluginName, g_UserContextID);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.transmitRequest\r\n */\r\n transmitRequest: function (requestName, pluginName, params, extraParams) {\r\n return this._super(requestName, pluginName, params, g_UserContextID, extraParams);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Окно отображаемое при потере связи с агентом.\r\n *\r\n * @method WebAccess.agent._showWaitMoreDialog\r\n * @since 5.1.0.1511\r\n * @private\r\n * @return WebAccess.agent\r\n */\r\n _showWaitMoreDialog: function () {\r\n var me = this;\r\n\r\n if (!!me._showWaitMoreDialogTimeout) clearTimeout(me._showWaitMoreDialogTimeout);\r\n me._showWaitMoreDialogTimeout = setTimeout(function () {\r\n\r\n var isAgentStartedAfterWait = false;\r\n\r\n var cancelClickAndOnClose = function () {\r\n if (!isAgentStartedAfterWait) {\r\n WA.agent.disable();\r\n window.location.reload();\r\n }\r\n };\r\n\r\n var d = new WA.CMP.dialogs.MessageBox();\r\n d.id = 'waitMore';\r\n //d.isSingleInstance = true;\r\n d.width = 450;\r\n d.okCancelButtons(function okClick() {\r\n d.disableButton('modal_ok_button');\r\n d.inlineHint.showWarning(L('AGENT_WAITING_START'));\r\n $('#new_error_container').find('ui-icon').css({\r\n background: 'url(\"images/spinner.gif\")',\r\n });\r\n\r\n global.WA.agent.transport.waitForStart(60000).done(function () {\r\n log.info('AGENT', 'Waiting for agent is done');\r\n // Всё же дождались старта.\r\n isAgentStartedAfterWait = true;\r\n d.close();\r\n }).fail(function (reason) {\r\n log.info('AGENT', 'Waiting for agent is failed');\r\n\r\n d.enableButton('modal_ok_button');\r\n // Не дождались.\r\n d.inlineHint.show(L('AGENT_WAITING_START_FAIL'));\r\n });\r\n\r\n return false;\r\n }, cancelClickAndOnClose);\r\n d.okText = L('WAIT_AGENT');\r\n d.cancelText = L('CONTINUE_WITHOUT_AGENT');\r\n d.show(L('AGENT_NOT_RESPONSE_WAIT_MORE'), L('AGENT_NOT_RESPONSE_WAIT_MORE_ADDITIONAL_TEXT'), L('ERROR'), 'error', null, cancelClickAndOnClose);\r\n\r\n log.info('AGENT', 'WaitMoreDialog was shown');\r\n\r\n }, 400);\r\n return this;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _showWaitMoreDialogTimeout: null,\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Окно отображаемое при обращении к агенту в другой сессии ОС.\r\n *\r\n * @method WebAccess.agent._showAgentStartedInAnotherSessionDialog\r\n * @since 5.1.0.1511\r\n * @private\r\n */\r\n _showAgentStartedInAnotherSessionDialog: function () {\r\n var d = new WA.CMP.dialogs.MessageBox();\r\n d.id = 'anotherSessionError';\r\n d.isSingleInstance = true;\r\n d.okText = L('CONTINUE_WITHOUT_AGENT');\r\n d.show(L('AGENT_RUNNING_IN_AHOTHER_WINDOWS_SESSION'), L('AGENT_RUNNING_IN_AHOTHER_WINDOWS_SESSION_ADDITIONAL_TEXT'), L('ERROR'), 'error', null, function () {\r\n WA.agent.disable();\r\n window.location.reload();\r\n });\r\n log.info('AGENT', 'AgentStartedInAnotherSessionDialog was shown');\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.start\r\n */\r\n start: function (opt_force) {\r\n return this._super(g_UserContextID);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.restart\r\n */\r\n restart: function () {\r\n return this._super(g_UserContextID);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.download\r\n */\r\n download: function (packageName) {\r\n var def = $.Deferred();\r\n\r\n if (!packageName) {\r\n var platform = WA.ENV.platform;\r\n var os = WA.ENV.os.name.toLowerCase();\r\n\r\n if (platform === 'linux') {\r\n if (os === 'mint' || os === 'ubuntu' || os === 'debian') {\r\n packageName = platform + '_deb';\r\n } else {\r\n packageName = platform + '_rpm';\r\n }\r\n } else {\r\n packageName = platform;\r\n }\r\n }\r\n\r\n if (g_AgentInstallID[packageName]) {\r\n window.open('/Download.ashx?accesstype=0&id=' + g_AgentInstallID[packageName]);\r\n def.resolve(packageName);\r\n } else {\r\n def.reject();\r\n }\r\n\r\n return def;\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.checkSessionState\r\n */\r\n checkSessionState: function (attemptNumber) {\r\n return this._super(attemptNumber, g_UserContextID, this._showAgentStartedInAnotherSessionDialog);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.uploadLogs\r\n */\r\n uploadLogs: function () {\r\n var me = this;\r\n var d = $.Deferred();\r\n\r\n WA.SRV.callSync('/Security.asmx/GetOpToken0', { Operation: TOKEN_OPERATION.DIAGNOSTICS }).done((token) => {\r\n d = me._super(token, g_UserContextID);\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.keepAlive\r\n */\r\n keepAlive: function() {\r\n return this._super(g_UserContextID);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.beginSession\r\n */\r\n beginSession: function() {\r\n var me = this;\r\n var d = $.Deferred();\r\n WA.SRV.callSync('/Security.asmx/GetPermanentOpToken', { Operation: TOKEN_OPERATION.DIAGNOSTICS }).done((token) => {\r\n var params = {\r\n 'UserLanguage': currentCultureName.split('-')[0],\r\n 'UserName': g_User.Name,\r\n 'SystemLanguage': appLang,\r\n 'SessionID': g_UserContextID,\r\n 'System': g_SysCode,\r\n 'IsSecured': (document.location.protocol == 'http:' ? 'n' : 'y'),\r\n 'Host': document.location.host,\r\n 'WebLinkServer': g_WebServerName,\r\n 'SessionUpdateTime': typeof SessionUpdateTime !== 'undefined' ? SessionUpdateTime : (10 * 60000),\r\n 'MaxRequestLength': g_MaxJsonRequestLength,\r\n 'NewJobsNotificationToken': '',\r\n 'LogServiceToken': token,\r\n 'ClientAffinity': $.cookie('ARRAffinity') || ''\r\n };\r\n\r\n me._super(params).done((result) => {\r\n d.resolve(result);\r\n }).fail((result) => {\r\n d.reject(result);\r\n });\r\n });\r\n\r\n \r\n return d.promise();\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.endSession\r\n */\r\n endSession: function() {\r\n return this._super(g_UserContextID);\r\n },\r\n\r\n /**\r\n * @override\r\n * @see agentCore.Agent.setLanguage\r\n */\r\n setLanguage: function(language) {\r\n return this._super(language, g_UserContextID);\r\n }\r\n\r\n });\r\n\r\n global.WA.agent = new Agent();\r\n global.WA.agent.Agent = Agent;\r\n global.WA.agent.transport = global.agentCore.transport;\r\n $.when(global.WA.agent.transport.httpReady).then(function () {\r\n WA.AgentInit.resolve();\r\n });\r\n\r\n})(window);\r\n","'use strict';\r\n\r\n/**\r\n * Предоставляет инструменты для работы с обновлениями Агента веб-доступа.\r\n *\r\n * @namespace WebAccess.agent.updates\r\n * @since 5.0.0.4100\r\n */\r\n(function (global) {\r\n var updates = {\r\n\r\n /**\r\n * Проверить наличие обновлений для Агента веб-доступа.\r\n *\r\n * @method WebAccess.agent.updates.checkUpdates\r\n * @returns {Deferred} True – Агент веб-доступа имеет одно или несколько обновлений, иначе False.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n checkUpdates: function() {\r\n var d = $.Deferred();\r\n\r\n //Получаем токен на запрос уведомлений о новых заданиях\r\n WA.SRV.callSync('/Security.asmx/GetOpToken0', { Operation: TOKEN_OPERATION.UPDATE_AGENT }).done(function(token) {\r\n d = global.checkUpdates(token, g_UserContextID);\r\n });\r\n\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить информацию о прогрессе загрузки обновления Агента веб-доступа.\r\n * Рассчитывается в процентах.\r\n *\r\n * @method WebAccess.agent.updates.getUpdateProgress\r\n * @returns {number} Процент загруженного обновления.\r\n */\r\n getUpdateProgress: function() {\r\n return global.getUpdateProgress(g_UserContextID);\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n global.updates = updates;\r\n})(window.WebAccess.agent);\r\n","\"use strict\";\r\n\r\n/**\r\n * Предоставляет инструменты для работы с EDMS-объектами через Агент веб-доступа.\r\n *\r\n * @namespace WebAccess.agent.edms\r\n * @since 5.0.0.4100\r\n */\r\n(function (global) {\r\n\r\n var edms = {\r\n /**\r\n * Проверяет наличие локальных копий документов.\r\n * Если локальные копии документов найдены, отобразится окно с полным списком копий.\r\n *\r\n * @method WebAccess.agent.edms.checkDocumentLocalCopies\r\n * @return {WebAccess.agent.edms} Объект типа edms.\r\n */\r\n checkDocumentLocalCopies: function () {\r\n //FIXME: always переделать на done и fail\r\n global.isPluginAvailable(\"edmsplugin\").always(function (isAvailableResponse) {\r\n if (isAvailableResponse) {\r\n global.transmitRequest(\"CheckDocumentLocalCopies\", \"edmsPlugin\", {}).done(function (response) {\r\n var localCopies = response.result;\r\n if (localCopies.length > 0) {\r\n ShowLocalCopiesWindow($.toJSON(localCopies));\r\n }\r\n }).fail(function (response) {\r\n ShowError(response.message);\r\n });\r\n }\r\n });\r\n return global;\r\n },\r\n\r\n /**\r\n * Получает список редактируемых документов.\r\n *\r\n * @method WebAccess.agent.edms.getOpenedDocuments\r\n * @return {Deferred} Результат запроса.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n getOpenedDocuments: function () {\r\n var def = $.Deferred();\r\n global.isPluginAvailable(\"edmsplugin\").done(function (isAvailable) {\r\n if (isAvailable) {\r\n global.transmitRequest(\"CHECKOPENEDDOCUMENTS\", \"edmsPlugin\", {}).done(function (response) {\r\n var docs = response.result;\r\n def.resolve(docs);\r\n }).fail(function (response) {\r\n def.reject(response.message);\r\n });\r\n } else {\r\n def.reject();\r\n }\r\n }).fail(function () {\r\n def.reject();\r\n });\r\n\r\n return def;\r\n },\r\n\r\n /**\r\n * Проверяет наличие локальной копии документа с указанным ИД.\r\n *\r\n * @method WebAccess.agent.edms.checkDocumentHasLocalCopy\r\n * @param {int} docID ИД документа, у которого нужно проверить наличие локальных копий\r\n * @return {Deferred>} Массив с локальными копиями указанного документа.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n checkDocumentHasLocalCopy: function (docID) {\r\n var d = $.Deferred();\r\n\r\n //FIXME: always переделать на done и fail\r\n global.isPluginAvailable(\"edmsplugin\")\r\n .always(function (isAvailableResponse) {\r\n if (isAvailableResponse) {\r\n global.transmitRequest(\"CheckDocumentLocalCopies\", \"edmsPlugin\", {}).done(function (response) {\r\n var localCopies = !!response.result ? response.result : [];\r\n var res = [];\r\n if (localCopies.length > 0) {\r\n for (var i = 0; i < localCopies.length; i++) {\r\n if (localCopies[i].ID == docID) {\r\n res.push(localCopies[i]);\r\n }\r\n }\r\n }\r\n d.resolve(res);\r\n }).fail(function (response) {\r\n d.reject([]);\r\n });\r\n } else {\r\n d.reject([]);\r\n }\r\n });\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Подписывает документ указанным сертификатом.\r\n *\r\n * @method WebAccess.agent.edms.signDocument\r\n * @param {number} docId ИД документа для подписания\r\n * @param {number} versionNumber Номер версии документа для подписания\r\n * @param {number} certificateId ИД сертификата, которым будет подписан документ\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания документа от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} additionalInfo Дополнительная информация о подписании документа\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается документ\r\n * @return {Deferred} Объект типа edms.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n signDocument: function (docId, versionNumber, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback, additionalInfo, pluginVersion, tokenPinCode) {\r\n var me = this;\r\n var d = $.Deferred();\r\n RequestToken(TOKEN_OPERATION.SIGN_DOCUMENT | TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n var requestParams = {\r\n \"DocumentID\": docId,\r\n \"DocumentVersion\": versionNumber,\r\n \"Token\": token,\r\n \"AdditionalInfo\": additionalInfo,\r\n \"PluginVersion\": typeof pluginVersion == 'undefined' ? null : pluginVersion,\r\n \"TokenPinCode\": typeof tokenPinCode == 'undefined' ? null : tokenPinCode\r\n };\r\n me._signObject(\"SignDocumentVersion\", requestParams, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback)\r\n .done((res) => {\r\n d.resolve(res);\r\n }).fail((res) => {\r\n d.reject(res);\r\n });\r\n }, docId, versionNumber);\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Подписывает атрибуты указанным RSA-сертификатом.\r\n *\r\n * @method WebAccess.agent.edms.signAttributes\r\n * @param {string} attributes Набор атрибутов для подписания\r\n * @param {number} certificateId ИД сертификата, которым будут подписаны атрибуты\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания документа от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {string} additionalInfo Дополнительная информация\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписываются атрибуты\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @return {Deferred} Объект типа edms.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n signAttributes: function (attributes, certificateId, pluginName, pluginVersion, comment, isApprovingSign, isForSubstitute, substituteUserCode, additionalInfo, tokenPinCode, onSignedCallback) {\r\n var me = this;\r\n var d = $.Deferred();\r\n\r\n var requestParams = {\r\n \"Attributes\": attributes,\r\n \"AdditionalInfo\": additionalInfo,\r\n \"PluginVersion\": typeof pluginVersion == 'undefined' ? null : btoa(pluginVersion), //агент ожидает получить версию плагина подписания в base64\r\n \"TokenPinCode\": typeof tokenPinCode == 'undefined' ? null : tokenPinCode\r\n };\r\n me._signObject(\"SignAttributes\", requestParams, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n },\r\n\r\n /**\r\n * Подписывает текст задания.\r\n *\r\n * @method WebAccess.agent.edms.signJob\r\n * @param {number} jobId ИД задания для подписания\r\n * @param {number} certificateId ИД сертификата, которым будет подписан текст задания\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания текста от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается текст задания\r\n * @return {Deferred} Объект типа edms.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n signJob: function (jobId, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback, pluginVersion, tokenPinCode) {\r\n var me = this;\r\n var d = $.Deferred();\r\n RequestToken(TOKEN_OPERATION.SIGN_TASK | TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n var requestParams = {\r\n \"JobID\": jobId,\r\n \"Token\": token,\r\n \"PluginVersion\": typeof pluginVersion == 'undefined' ? null : pluginVersion,\r\n \"TokenPinCode\": typeof tokenPinCode == 'undefined' || tokenPinCode == null ? \"\" : tokenPinCode\r\n };\r\n me._signObject(\"SignJobText\", requestParams, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback)\r\n .done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n }, jobId);\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подписывает текст задачи.\r\n *\r\n * @method WebAccess.agent.edms.signTask\r\n * @param {number} taskID ИД задачи для подписания\r\n * @param {number} certificateID ИД сертификата, которым будет подписываться текст задачи\r\n * @param {string} pluginName Имя плагина Агента веб-доступа для подписания\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак подписания текста от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Код замещаемого пользователя. Параметр передается, если в параметре isForSubstitute установлено значение true\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {string} pluginVersion Версия плагина Агента веб-доступа для подписания\r\n * @param {string} tokenPinCode Пин-код токена, с помощью которого подписывается текст задачи\r\n * @return {Deferred} Объект типа edms.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n signTask: function (taskID, certificateID, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback, pluginVersion, tokenPinCode) {\r\n var me = this;\r\n var d = $.Deferred();\r\n RequestToken(TOKEN_OPERATION.SIGN_TASK | TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n var requestParams = {\r\n \"TaskID\": taskID,\r\n \"Token\": token,\r\n \"PluginVersion\": typeof pluginVersion == 'undefined' ? null : pluginVersion,\r\n \"TokenPinCode\": typeof tokenPinCode == 'undefined' || tokenPinCode == null ? \"\" : tokenPinCode\r\n };\r\n me._signObject(\"SignTaskText\", requestParams, certificateID, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback)\r\n .done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n }, taskID);\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Подписать произвольный объект.\r\n *\r\n * @method WebAccess.agent.edms._signObject\r\n * @param {string} requestName Название запроса\r\n * @param {Object} requestParams Объект с параметрами для запроса\r\n * @param {string} certificateId Ид сертификата\r\n * @param {string} pluginName Имя плагина подписания в Base64\r\n * @param {string} comment Комментарий к подписи\r\n * @param {boolean} isApprovingSign Признак утверждающей подписи\r\n * @param {boolean} isForSubstitute Признак если подпись совершается от имени замещаемого пользователя\r\n * @param {string} substituteUserCode Если isForSubstitute = true, то здесь передается код замещаемого пользователя\r\n * @param {function} onSignedCallback Функция обратного вызова для подписания. В качестве параметра передается ответ от Агента веб-доступа\r\n * @private\r\n * @return {Deferred} Результат подписания\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _signObject: function (requestName, requestParams, certificateId, pluginName, comment, isApprovingSign, isForSubstitute, substituteUserCode, onSignedCallback) {\r\n var d = $.Deferred();\r\n requestParams[\"PluginName\"] = pluginName;\r\n requestParams[\"CertificateID\"] = certificateId;\r\n requestParams[\"Comment\"] = !!comment ? encodeURIComponent(comment) : \"\";\r\n requestParams[\"IsApprovingSign\"] = !!isApprovingSign ? isApprovingSign : false;\r\n requestParams[\"IsForSubstitute\"] = !!isForSubstitute ? isForSubstitute : false;\r\n requestParams[\"SubstituteUserCode\"] = !!substituteUserCode ? substituteUserCode : \"\";\r\n\r\n global.transmitRequest(requestName, \"edmsplugin\", requestParams).always(function (res) {\r\n if (onSignedCallback) onSignedCallback(res);\r\n }).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res);\r\n });\r\n\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает ключ для дешифрования документа.\r\n *\r\n * @method WebAccess.agent.edms.getDocumentDecryptedKey\r\n * @param {int} documentID ИД документа\r\n * @param {string} encryptionType Тип шифрования\r\n * @param {base64string} pluginName Имя плагина Агента веб-доступа для шифрования\r\n * @param {string} password Пароль для расшифровки\r\n * @param {function} onSuccess Функция обратного вызова для возвращения ключа. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {function} onError Функция обратного вызова для отображения ошибки. В качестве параметра передается ответ от Агента веб-доступа\r\n * @return {WebAccess.agent.edms} Объект типа edms.\r\n */\r\n getDocumentDecryptedKey: function (documentID, encryptionType, pluginName, password, onSuccess, onError) {\r\n var me = this;\r\n RequestToken(TOKEN_OPERATION.DOWNLOAD_DOCUMENT_BODY, function (token) {\r\n var requestParams = { \"DocID\": documentID, \"Version\": 0, \"Token\": token };\r\n return me._getObjectDecryptedKey(\"GetDocDecryptedKey\", requestParams, encryptionType, pluginName, password, onSuccess, onError);\r\n }, documentID, 0);\r\n return me;\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает ключ для дешифрования задачи.\r\n *\r\n * @method WebAccess.agent.edms.getTaskDecryptedKey\r\n * @param {int} documentID ИД задачи\r\n * @param {string} encryptionType Тип шифрования\r\n * @param {base64string} pluginName Имя плагина Агента веб-доступа для шифрования\r\n * @param {string} password Пароль для расшифровки\r\n * @param {function} onSuccess Функция обратного вызова для возвращения ключа. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {function} onError Функция обратного вызова для отображения ошибки. В качестве параметра передается ответ от Агента веб-доступа\r\n * @return {WebAccess.agent.edms} Объект типа edms.\r\n */\r\n getTaskDecryptedKey: function (taskID, encryptionType, pluginName, password, onSuccess, onError) {\r\n var me = this;\r\n RequestToken(TOKEN_OPERATION.GET_ENCRYPTION_KEY, function (token) {\r\n var requestParams = { \"TaskID\": taskID, \"Token\": token };\r\n return me._getObjectDecryptedKey(\"GetTaskDecryptedKey\", requestParams, encryptionType, pluginName, password, onSuccess, onError);\r\n }, taskID);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает ключ для дешифрования задания.\r\n *\r\n * @method WebAccess.agent.edms.getJobDecryptedKey\r\n * @param {int} jobID ИД задания\r\n * @param {string} encryptionType Тип шифрования\r\n * @param {base64string} pluginName Имя плагина Агента веб-доступа для шифрования\r\n * @param {string} password Пароль для расшифровки\r\n * @param {function} onSuccess Функция обратного вызова для возвращения ключа. В качестве параметра передается ответ от Агента веб-доступа\r\n * @param {function} onError Функция обратного вызова для отображения ошибки. В качестве параметра передается ответ от Агента веб-доступа\r\n * @return {WebAccess.agent.edms} Объект типа edms.\r\n */\r\n getJobDecryptedKey: function (jobID, encryptionType, pluginName, password, onSuccess, onError) {\r\n var me = this;\r\n RequestToken(TOKEN_OPERATION.GET_ENCRYPTION_KEY, function (token) {\r\n var requestParams = { \"JobID\": jobID, \"Token\": token };\r\n return me._getObjectDecryptedKey(\"GetJobDecryptedKey\", requestParams, encryptionType, pluginName, password, onSuccess, onError);\r\n }, jobID);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить ключ для дешифрования объекта.\r\n * @method WebAccess.agent.edms._getObjectDecryptedKey\r\n * @private\r\n * @param {string} requestName Название запроса\r\n * @param {object} requestParams Объект с параметрами для запроса\r\n * @param {string} encryptionType Тип шифрования\r\n * @param {base64string} pluginName Имя плагина шифрования\r\n * @param {string} password Пароль для расшифровки\r\n * @param {function} onSuccess Функция обратного вызова для возвращения ключа. В качестве параметра передается ответ от агента.\r\n * @param {function} onError Функция обратного вызова для отображения ошибки. В качестве параметра передается ответ от агента.\r\n */\r\n _getObjectDecryptedKey: function (requestName, requestParams, encryptionType, pluginName, password, onSuccess, onError) {\r\n requestParams[\"EncryptionPluginName\"] = pluginName;\r\n requestParams[\"EncodeType\"] = encryptionType;\r\n requestParams[\"Password\"] = password;\r\n\r\n global.transmitRequest(requestName, \"edmsplugin\", requestParams).done(function (response) {\r\n if (onSuccess) { onSuccess(response.result); }\r\n }).fail(function (response) {\r\n if (onError) onError(response.message);\r\n });\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n global.edms = edms;\r\n})(window.WebAccess.agent);\r\n","\"use strict\";\r\n\r\n/**\r\n * Предоставляет инструменты для работы с уведомлениями Агента веб-доступа, обеспечивающие взаимодействие Агента с пользователем.\r\n *\r\n * @namespace WebAccess.agent.notifications\r\n * @since 5.1.0.1500\r\n */\r\n(function (global) {\r\n var notifications = {\r\n\r\n /**\r\n * Отобразать уведомление для пользователя.\r\n *\r\n * @method WebAccess.agent.notifications.show\r\n * @param {string} message Текст сообщения\r\n * @return {Deferred} Результат запроса.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n show: function (message) {\r\n var d = $.Deferred();\r\n global.transmitRequest(\"Notify\", \"NotificationPlugin\", { message: message }).always(function(res) {\r\n d.resolve(res);\r\n });\r\n return d.promise();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n };\r\n\r\n global.notifications = notifications;\r\n})(window.WebAccess.agent);\r\n","\"use strict\";\r\n\r\n/**\r\n * Предоставляет инструменты для работы с буфером обмена через Агент веб-доступа. Например, скопировать ссылки в буфер обмена.\r\n *\r\n * @namespace WebAccess.agent.clipboard\r\n * @since 5.1.0.1500\r\n */\r\n(function (global) {\r\n var clipboard = {\r\n\r\n /**\r\n * Скопировать массив ссылок в буфер обмена.\r\n *\r\n * @method WebAccess.agent.clipboard#copyLinksToClipboard\r\n * @param {array} links Массив ссылок для перемещения в буфер обмена\r\n * @return {Deferred} Количество скопированных ссылок.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n copyLinksToClipboard: function (links) {\r\n var d = $.Deferred();\r\n var transmittedRefs = 0;\r\n\r\n var addLink = function (link) {\r\n var g = $.Deferred();\r\n global.transmitRequest(\"AddLinkToClipboard\", \"Clipboard\", link).done(function (res) {\r\n if (res.success) {\r\n transmittedRefs++;\r\n }\r\n g.resolve();\r\n });\r\n return g.promise();\r\n };\r\n\r\n //первая ссылка копируется в буфер\r\n global.transmitRequest(\"CopyLinkToClipboard\", \"Clipboard\", links[0]).always(function (res) {\r\n if (res.success) transmittedRefs++;\r\n //все последующие ссылки добавляются к первой\r\n var deferreds = [];\r\n for (var i = 1; i < links.length; i++)\r\n deferreds.push(addLink(links[i]));\r\n //когда все ссылки добавятся, возвращаем число успешно скопированных\r\n $.when.apply(null, deferreds).then(function () {\r\n d.resolve(transmittedRefs);\r\n });\r\n });\r\n\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получить объект-папку, из которой были скопированы ссылки. Необходим для вырезания ссылок.\r\n *\r\n * @method WebAccess.agent.clipboard#getLinkSourceLocation\r\n * @return {Deferred} Объект-папка, из которой были скопированы ссылки.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n getLinkSourceLocation: function () {\r\n var d = $.Deferred();\r\n global.transmitRequest(\"GetLinksSource\", \"Clipboard\", {}).done(function (response) {\r\n d.resolve(response.result);\r\n });\r\n return d.promise();\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Получает массив объектов ссылок из буфера обмена.\r\n *\r\n * @method WebAccess.agent.clipboard#getLinksFromClipboard\r\n * @return {Deferred>} Массив объектов ссылок.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n getLinksFromClipboard: function () {\r\n var d = $.Deferred();\r\n global.transmitRequest(\"PasteLinksFromClipboard\", \"Clipboard\", {}).always(function (response) {\r\n if (response.success) {\r\n var links = response.result;\r\n if (links.length > 0) {\r\n //Преобразовываем ссылки к нужному формату, FIXME: привести потом всё к одному виду\r\n for (var i = 0; i < links.length; i++) {\r\n links[i].Kind = (links[i].Kind == 'E' ? 'EDOC' : links[i].Kind);\r\n links[i].Kind = (links[i].Kind == 'F' ? 'FOL' : links[i].Kind);\r\n links[i].Kind = (links[i].Kind == 'T' ? 'TASK' : links[i].Kind);\r\n links[i].Kind = (links[i].Kind == 'J' ? 'JOB' : links[i].Kind);\r\n links[i].Kind = (links[i].Kind == 'R' ? 'REF' : links[i].Kind);\r\n }\r\n }\r\n d.resolve(links);\r\n } else {\r\n d.reject();\r\n }\r\n });\r\n\r\n return d.promise();\r\n }\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n global.clipboard = clipboard;\r\n\r\n})(window.WebAccess.agent);\r\n","(function (global) {\r\n\r\n //CREVIEW Шамов А.: Раз разделил на вкладки все настройки, то и этот файл надо бы разбить по вкладкам.\r\n\r\n /**\r\n * Блокируем сверх-частый вызов сервиса.\r\n * В сервисе происходят не самые легкие\r\n * махинации.\r\n * @inner\r\n * @function setLock();\r\n */\r\n var themeLock = false;\r\n var setLock = function () {\r\n themeLock = true;\r\n setTimeout(function () { themeLock = false }, 2000);\r\n };\r\n\r\n var saveTimeout = null;\r\n\r\n /**\r\n * Функции отвечающие за работу страницы настроек.\r\n * @namespace Core.settings\r\n * @since 5.0.0.4200 Версия по интерфейсам\r\n */\r\n global.settings = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Действие для кнопки \"Переустановить\" для агента\r\n * @method Core.settings.initAgentControls\r\n */\r\n global.settings.installAgent = function () {\r\n var jButton = $('#reinstall');\r\n\r\n WA.agent\r\n .enable()\r\n .setSessionInitialized(false);\r\n\r\n InitializeAgentSession(true);\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Информация о темах\r\n */\r\n global.settings.themes = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализация контролов отвечающих за работу с агентом\r\n * @method Core.settings.initAgentControls\r\n */\r\n global.settings.initAgentControls = WA.TCD(function () {\r\n\r\n var jCheck = $(\"#isAgentEnabled\");\r\n var jDownload = $(\"#download\");\r\n var jLaunch = $(\"#launch\");\r\n var jUploadLogFiles = $(\"#uploadLogFiles\");\r\n\r\n if (WA.agent.isDisabled()) {\r\n jCheck.prop(\"checked\", true);\r\n jDownload.addClass('disabled');\r\n jDownload.attr('disabled', true);\r\n jLaunch.addClass('disabled');\r\n jLaunch.attr('disabled', true);\r\n jUploadLogFiles.addClass('disabled');\r\n jUploadLogFiles.attr('disabled', true);\r\n };\r\n\r\n\r\n jCheck.on('change', function () {\r\n if ($(this).is(':checked')) {\r\n WA.agent.disable();\r\n jDownload.addClass('disabled');\r\n jDownload.attr('disabled', true);\r\n jLaunch.addClass('disabled');\r\n jLaunch.attr('disabled', true);\r\n jUploadLogFiles.addClass('disabled');\r\n jUploadLogFiles.attr('disabled', true);\r\n } else {\r\n WA.agent.enable();\r\n jDownload.removeClass('disabled');\r\n jDownload.attr('disabled', false);\r\n jLaunch.removeClass('disabled');\r\n jLaunch.attr('disabled', false);\r\n jUploadLogFiles.removeClass('disabled');\r\n jUploadLogFiles.attr('disabled', false);\r\n }\r\n Core.settings.initDocDefaultAction();\r\n global.settings.saveDocDefaultActionSettings();\r\n //(new WA.CMP.NTF.Toast()).show(L('SETTINGS_SAVED'));\r\n });\r\n return global.settings;\r\n });\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Вызывает сервис сохранения настроек открытия документов и предпросмотра.\r\n * @function Core.settings.applyPreviewSettingss\r\n * @since 5.4.0.1006\r\n * @return Core.settings\r\n */\r\n global.settings.applyPreviewSettings = function (isPreviewEnabled, isColoringRecordsEnabled, isFullscreenPreview, openDocForEditByDefault, openCardByDefault) {\r\n\r\n g_isPreviewEnabled = isPreviewEnabled;\r\n g_isColoringRecordsEnabled = isColoringRecordsEnabled;\r\n g_isFullscreenPreview = isFullscreenPreview;\r\n g_openDocForEditByDefault = openDocForEditByDefault;\r\n\r\n return WA.SRV.call(\"/Session.asmx/ApplyPreviewSettings\", {\r\n EnablePreview: isPreviewEnabled ? \"True\" : \"False\",\r\n EnableColoringRecords: isColoringRecordsEnabled ? \"True\" : \"False\",\r\n UseFullScreenPreview: isFullscreenPreview ? \"True\" : \"False\",\r\n OpenCardByDefault: openCardByDefault ? \"True\" : \"False\",\r\n OpenDocForEditByDefault: openDocForEditByDefault ? \"True\" : \"False\"\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Сохраняет настройки открытия документов и предпросмотра.\r\n * @function Core.settings.saveDocDefaultActionSettings\r\n * @since 5.0.0.4200\r\n * @return Core.settings\r\n */\r\n global.settings.saveDocDefaultActionSettings = function () {\r\n var isPreviewEnabled = $(\"#chkOpenPreviewFromList\").length !== 0\r\n ? $(\"#chkOpenPreviewFromList\").is(':checked')\r\n : !WA.agent.isAvailable() && (g_defaultListAction != 'showcard');\r\n var isColoringRecordsEnabled = $(\"#chkColoringRecords\").length !== 0\r\n ? $(\"#chkColoringRecords\").is(':checked')\r\n : g_isColoringRecordsEnabled;\r\n var isFullscreenPreview = $(\"#chkOpenFullscreenPreview\").length !== 0\r\n ? $(\"#chkOpenFullscreenPreview\").is(':checked')\r\n : g_isFullscreenPreview;\r\n var openDocForEditByDefault = $('#chkOpenDocForEditingDefault').length !== 0\r\n ? $('#chkOpenDocForEditingDefault').is(':checked')\r\n : g_openDocForEditByDefault;\r\n var openCardByDefault = $(\"#chkOpenCardFromList\").length !== 0\r\n ? $(\"#chkOpenCardFromList\").is(':checked')\r\n : g_defaultListAction === 'showcard';\r\n\r\n return global.settings.applyPreviewSettings(isPreviewEnabled, isColoringRecordsEnabled, isFullscreenPreview, openDocForEditByDefault, openCardByDefault).done(function (res) {\r\n (new WA.CMP.NTF.Toast()).show(L('SETTINGS_SAVED'));\r\n }).always(function () {\r\n if ($.isFunction(ReloadWindowToLoadPlugin)) ReloadWindowToLoadPlugin();\r\n });\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализирует настройки предпросмотра.\r\n * @function Core.settings.initPreviewSettings\r\n * @since 5.0.0.4200\r\n * @return Core.settings\r\n */\r\n global.settings.initPreviewSettings = WA.TCD(function () {\r\n $(function () {\r\n var jOpenFullscreenPreviewChk = $('#chkOpenFullscreenPreview');\r\n if (g_isFullscreenPreview) {\r\n jOpenFullscreenPreviewChk.attr('checked', true);\r\n }\r\n });\r\n\r\n $(\"#chkOpenPreviewFromList, #chkOpenEditorFromList, #chkOpenCardFromList\")\r\n .on(\"change\", ViewPreviewSettingsModal_DisableControls)\r\n .on(\"change\", window.Core.settings.saveDocDefaultActionSettings);\r\n\r\n $(\"#chkOpenDocForReadingDefault, #chkOpenDocForEditingDefault\")\r\n .on(\"change\", ViewPreviewSettingsModal_ChangePreviewSettings)\r\n .on(\"change\", window.Core.settings.saveDocDefaultActionSettings);\r\n\r\n return global.settings;\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n* Инициализирует настройки раскраски записей справочников.\r\n* @function Core.settings.initColoringRecordsSettings\r\n* @since 5.2.1.1000\r\n* @return Core.settings\r\n*/\r\n global.settings.initColoringRecordsSettings = WA.TCD(function () {\r\n $(function () {\r\n jColoringRecordsEnabled = $(\"#chkColoringRecords\");\r\n\r\n if (g_isColoringRecordsEnabled) {\r\n jColoringRecordsEnabled.attr('checked', true);\r\n }\r\n\r\n if (g_isColoringRecordsSettingsHidden) {\r\n jColoringRecordsEnabled.attr('disabled', true);\r\n jColoringRecordsEnabled.parent().attr('title', L(\"DISABLE_COLORING_RECORD_SETTINGS_HINT\"));\r\n jColoringRecordsEnabled.parent().addClass(\"field_disabled\");\r\n }\r\n });\r\n\r\n return global.settings;\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n* Инициализирует настройки автоочистки.\r\n* @function Core.settings.initAutoCleaningSettings\r\n* @since 5.1.0.1515\r\n* @return Core.settings\r\n*/\r\n global.settings.initAutoCleaningSettings = WA.TCD(function () {\r\n\r\n var jSettingsAutocleaningEnable = $('#settings-autocleaning-enable');\r\n var jSettingsAutocleaningOnCompletion = $(\"#settings-autocleaning-oncompletion\");\r\n var jSettingsAutocleaningPeriod = $('#settings-autocleaning-period');\r\n var jSettingsAutocleaningDefault = $('#settings-autocleaning-default');\r\n var jSettingsAutocleaningAfterdays = $('#settings-autocleaning-afterdays');\r\n var AutocleaningDefaultChangeLink = $('.ac-change-link');\r\n var changedObjects = [\r\n jSettingsAutocleaningEnable, jSettingsAutocleaningOnCompletion, jSettingsAutocleaningAfterdays,\r\n jSettingsAutocleaningPeriod\r\n ];\r\n\r\n //Отключение автоочиски\r\n jSettingsAutocleaningEnable.on('change', window.Core.settings.switchAutoCleaningSettings);\r\n\r\n //Изменение настроек\r\n $.each(changedObjects, function (index, value) {\r\n value.on(\"change\", function () {\r\n clearTimeout(saveTimeout);\r\n saveTimeout = setTimeout(window.Core.settings.saveAutoCleaningSettings, 500);\r\n });\r\n });\r\n\r\n jSettingsAutocleaningPeriod.on('keydown', function () {\r\n clearTimeout(saveTimeout);\r\n saveTimeout = setTimeout(window.Core.settings.saveAutoCleaningSettings, 500);\r\n });\r\n\r\n //Валидатор числа дней\r\n //$('#settings-autocleaning-period').on('keypress', function (event) {\r\n // return event.charCode >= 48 && event.charCode <= 57\r\n //});\r\n jSettingsAutocleaningPeriod.Validator(\"^([-]?|[-]?[\\\\d]+)$\");\r\n\r\n //Настройки по умолчанию\r\n jSettingsAutocleaningDefault.on('click', window.Core.settings.updateDefaultAutocleaningSettings);\r\n\r\n // Сброс настроек\r\n AutocleaningDefaultChangeLink.on('click', window.Core.settings.createAutocleaningSettingsFromDefaultSettings);\r\n\r\n return global.settings;\r\n });\r\n\r\n /**\r\n* Сохраняет настройки автоочистки.\r\n* @function Core.settings.saveAutoCleaningSettings\r\n* @since 5.1.0.1515\r\n* @return Core.settings\r\n*/\r\n global.settings.saveAutoCleaningSettings = WA.TCD(function () {\r\n\r\n var jSettingsAutocleaningEnable = $('#settings-autocleaning-enable');\r\n var jSettingsAutocleaningOnCompletion = $(\"#settings-autocleaning-oncompletion\");\r\n var jSettingsAutocleaningPeriod = $('#settings-autocleaning-period');\r\n\r\n var enableAutoClean = jSettingsAutocleaningEnable.is(':checked');\r\n var cleanMode = enableAutoClean ? (jSettingsAutocleaningOnCompletion.is(':checked') ? 0 : 1) : 255;\r\n var linkStoringPeriod = jSettingsAutocleaningPeriod.val();\r\n\r\n //Если режим автоочистки по дням, а количество дней не задано, то не сохраняем\r\n if ((cleanMode == 1) && (linkStoringPeriod === \"\"))\r\n return global.settings;\r\n\r\n //Если введено некорректное значение, то ставим 1\r\n if (!linkStoringPeriod) {\r\n linkStoringPeriod = 1;\r\n jSettingsAutocleaningPeriod.val(1)\r\n }\r\n\r\n ShowTopSpinner();\r\n WA.SRV.call(\"/Session.asmx/ApplyAutoCleanSettings\", {\r\n CleanMode: cleanMode,\r\n LinkStoringPeriod: linkStoringPeriod\r\n }).always(function () {\r\n HideTopSpinner(L('SETTINGS_SAVED'), 2000);\r\n }).error(function (error) {\r\n console.log(error);\r\n });\r\n return global.settings;\r\n });\r\n\r\n /**\r\n * Добавляет папку в список папок автоочистки.\r\n * @function Core.settings.addAutoCleanFolder\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.addAutoCleanFolder = WA.TCD(function (list) {\r\n list.PasteLinks(function (link) {\r\n return window.Core.settings.setAutoCleanFolder(link.ID, true);\r\n }, L('SETTINGS_SAVED'));\r\n return global.settings;\r\n });\r\n\r\n /**\r\n * Удаляет папку из список папок автоочистки.\r\n * @function Core.settings.removeAutoCleanFolder\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.removeAutoCleanFolder = WA.TCD(function (list) {\r\n list.DeleteLinks(null, function (link) {\r\n return window.Core.settings.setAutoCleanFolder(link.ID, false);\r\n }, L('SETTINGS_SAVED'));\r\n return global.settings;\r\n });\r\n\r\n /**\r\n * Устанавливает статус автоочистки для папки.\r\n * @function Core.settings.setAutoCleanFolder\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.setAutoCleanFolder = WA.TCD(function (folderID, enabled) {\r\n var success = false;\r\n //CREVIEW Шамов А.: Почему тут callSync? Выше был обычный call\r\n // Isaev_DM: setAutoCleanFolder завязаны на работу с ссылками, не стал рефакторить пока старый код\r\n WA.SRV.callSync(\"/Folder.asmx/SetFolderAutoClean\", {\r\n FolderID: folderID,\r\n Enabled: enabled\r\n }, null, null, true).success(function (result) {\r\n success = true;\r\n });\r\n return success;\r\n });\r\n\r\n /**\r\n * Устанавливает настройки автоочистки по умолчанию.\r\n * @function Core.settings.defaultAutoCleaningSettings\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n function setAutoCleaningSettings(defaultSettings) {\r\n\r\n if (defaultSettings != null) {\r\n\r\n var autocleaningFolderList = ListRequisite('ctl00_MainContent_ctl00_AutoCleanFolderList');\r\n var defaultLinks = [];\r\n\r\n var jSettingsAutocleaningEnable = $('#settings-autocleaning-enable');\r\n var jSettingsAutocleaningOnCompletion = $(\"#settings-autocleaning-oncompletion\");\r\n var jSettingsAutocleaningPeriod = $('#settings-autocleaning-period');\r\n var jSettingsAutocleaningAfterdays = $('#settings-autocleaning-afterdays');\r\n\r\n jSettingsAutocleaningOnCompletion.attr('disabled', false);\r\n jSettingsAutocleaningAfterdays.attr('disabled', false);\r\n jSettingsAutocleaningPeriod.attr('disabled', false);\r\n jSettingsAutocleaningPeriod.removeClass('Req_Disabled');\r\n\r\n if (defaultSettings.AllUsersNeedDeleteLinks == \"Y\")\r\n jSettingsAutocleaningEnable.prop('checked', true);\r\n else {\r\n jSettingsAutocleaningEnable.prop('checked', false);\r\n jSettingsAutocleaningAfterdays.attr('disabled', true);\r\n jSettingsAutocleaningPeriod.attr('disabled', true);\r\n jSettingsAutocleaningOnCompletion.prop('disabled', true);\r\n }\r\n\r\n if (defaultSettings.AllUsersLinkStoringPeriod == \"0\") {\r\n jSettingsAutocleaningAfterdays.prop('checked', false);\r\n jSettingsAutocleaningOnCompletion.prop('checked', true);\r\n jSettingsAutocleaningPeriod.val(1);\r\n } else {\r\n jSettingsAutocleaningOnCompletion.prop('checked', false);\r\n jSettingsAutocleaningAfterdays.prop('checked', true);\r\n jSettingsAutocleaningPeriod.val(defaultSettings.AllUsersLinkStoringPeriod);\r\n }\r\n\r\n if (defaultSettings.AutoCleanInbox != \"0\")\r\n defaultLinks.push({ ID: parseInt(defaultSettings.AutoCleanInbox), Kind: \"FOL\", CompCode: null });\r\n\r\n if (defaultSettings.AutoCleanOutbox != \"0\")\r\n defaultLinks.push({ ID: parseInt(defaultSettings.AutoCleanOutbox), Kind: \"FOL\", CompCode: null });\r\n\r\n autocleaningFolderList.Clear(function (link) {\r\n window.Core.settings.setAutoCleanFolder(link.ID, false);\r\n });\r\n\r\n autocleaningFolderList.AddLinks(defaultLinks, autocleaningFolderList, function (link) {\r\n return window.Core.settings.setAutoCleanFolder(link.ID, true);\r\n });\r\n\r\n }\r\n\r\n window.Core.settings.saveAutoCleaningSettings();\r\n\r\n };\r\n\r\n /**\r\n * Включает/Отключает автоочистку в настройках.\r\n * @function Core.settings.disableAutoCleaningSettings\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.switchAutoCleaningSettings = WA.TCD(function () {\r\n\r\n var jSettingsAutocleaningEnable = $('#settings-autocleaning-enable');\r\n var jSettingsAutocleaningOnCompletion = $(\"#settings-autocleaning-oncompletion\");\r\n var jSettingsAutocleaningPeriod = $('#settings-autocleaning-period');\r\n var jSettingsAutocleaningAfterdays = $('#settings-autocleaning-afterdays');\r\n\r\n var disable = !jSettingsAutocleaningEnable.is(\":checked\");\r\n jSettingsAutocleaningOnCompletion.attr('disabled', disable);\r\n jSettingsAutocleaningAfterdays.attr('disabled', disable);\r\n jSettingsAutocleaningPeriod.attr('disabled', disable);\r\n if (disable)\r\n jSettingsAutocleaningPeriod.addClass('Req_Disabled');\r\n else\r\n jSettingsAutocleaningPeriod.removeClass('Req_Disabled');\r\n });\r\n\r\n /**\r\n * Получает дефолтные настройки автоочистки.\r\n * @function Core.settings.updateDefaultAutocleaningSettings\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.updateDefaultAutocleaningSettings = WA.TCD(function () {\r\n var success = false;\r\n WA.SRV.call(\"/Session.asmx/GetDefaultAutocleaningSettings\",\r\n null, null, null, true).success(function (result) {\r\n setAutoCleaningSettings(result);\r\n success = true;\r\n });\r\n return success;\r\n });\r\n\r\n /**\r\n * Создает пользовательские настройки на основе настроек администратора.\r\n * @function Core.settings.getDefaultAutocleaningSettings\r\n * @since 5.1.0.1515\r\n * @return Core.settings\r\n */\r\n global.settings.createAutocleaningSettingsFromDefaultSettings = WA.TCD(function () {\r\n var success = false;\r\n WA.SRV.call(\"/Session.asmx/CreateAutocleaningSettingsFromDefaultSettings\",\r\n null, null, null, true).success(function (result) {\r\n success = true;\r\n //CREVIEW Isaev_DM: Пересмотреть реализацию в ходе поддержки тестирования\r\n location.reload();\r\n });\r\n return success;\r\n });\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Устанавливает часовой пояс пользователя.\r\n * @param {} jObject \r\n * @returns {} \r\n */\r\n global.settings.setTimeZone = function(jObject) {\r\n var pickInstance = jObject.data()['DropDownListInstance'];\r\n var timeZoneId = pickInstance.getValue();\r\n \r\n WebAccess.services.userProfile.setTimeZone(timeZoneId).done(function () {\r\n var toast = new WA.CMP.NTF.Toast();\r\n toast.showMessage(L(\"SETTINGS_SAVED\"));\r\n }).fail(function (err) {\r\n ShowError(err);\r\n });\r\n }\r\n\r\n // Событие change вызывается всегда поэтому модалка\r\n // снова срабатывает при нажатии на кнопку отмена если убрать cancelLock.\r\n var cancelLock = false;\r\n global.settings.setNewLanguage = function (jObject) {\r\n if (cancelLock) return;\r\n\r\n var handler = arguments.callee;\r\n var pickInstance = jObject.data()['DropDownListInstance'];\r\n\r\n var lang = pickInstance.getValue();\r\n var langCaption = pickInstance.getDisplayValue();\r\n if (lang == pickInstance.prevValue) return;\r\n\r\n var dialog = new WA.CMP.dialogs.MessageBox();\r\n dialog.isShowCancelButton = true;\r\n dialog.isShowOkButton = false;\r\n dialog.removeDefaultButtons();\r\n\r\n var labels = {\r\n 'relogin': L('RELOGIN'),\r\n 'reloginLater': L('OK'),\r\n 'cancel': L('RELOGINCANCEL')\r\n };\r\n\r\n if (isPassthrough) labels = {\r\n 'relogin': L('RELOGIN_AUTO'),\r\n 'reloginLater': L('RELOGIN_LATER_AUTO')\r\n };\r\n\r\n var cancel = function () {\r\n cancelLock = true;\r\n pickInstance.setPrevValue(false);\r\n setTimeout(function () { cancelLock = false; }, 100);\r\n };\r\n\r\n dialog.addButton('ReloginLater', labels.reloginLater, function () {\r\n WebAccess.services.session.SetNewLanguage(lang);\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n WA.CR.inlineHint.showWarning(L('REGIONAL_SETTINGS_LATER_NEW_LANGUAGE', langCaption), null, INLINE_HINT_PRIORITY.PRIMARY); \r\n })\r\n .addButton('CancelButton', L('CANCEL'), cancel)\r\n .bind('crossClose', cancel)\r\n .show(L('RELOGIN_DIALOG_MAIN_TEXT'), L('RELOGIN_DIALOG_ADDITIONAL_TEXT'), L('RELOGIN_DIALOG_TITLE'), 'warning')\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Инициализирует настройки открытия документов.\r\n * @function Core.settings.initDocDefaultAction\r\n * @since 5.0.0.4200\r\n * @return Core.settings\r\n */\r\n global.settings.initDocDefaultAction = WA.TCD(function () {\r\n var enableRadioButton = function (jBtn) {\r\n jBtn.next(\"label\").removeClass('field_disabled');\r\n jBtn.attr('disabled', false);\r\n };\r\n\r\n var disableRadioButton = function (jBtn) {\r\n jBtn.next(\"label\").addClass('field_disabled');\r\n jBtn.attr('disabled', 'disabled');\r\n };\r\n\r\n $.when(WA.AgentInit).then(function () {\r\n var jOpenPreviewFromListChk = $('#chkOpenPreviewFromList');\r\n var jOpenCardFromListChk = $('#chkOpenCardFromList');\r\n var jOpenEditorFromListChk = $('#chkOpenEditorFromList');\r\n var jOpenDocForReadingDefaultChk = $('#chkOpenDocForReadingDefault');\r\n var jOpenDocForEditingDefaultChk = $('#chkOpenDocForEditingDefault');\r\n\r\n var needDisableAgentSetts = !WA.agent.isAvailable();\r\n switch (g_defaultListAction) {\r\n case 'preview':\r\n jOpenPreviewFromListChk.attr('checked', true);\r\n break;\r\n case 'showcard':\r\n jOpenCardFromListChk.attr('checked', true);\r\n break;\r\n case 'open':\r\n jOpenEditorFromListChk.attr('checked', true);\r\n break;\r\n case 'viewineditor':\r\n jOpenEditorFromListChk.attr('checked', true);\r\n break;\r\n }\r\n\r\n if (needDisableAgentSetts && (g_defaultListAction != 'showcard')) {\r\n jOpenPreviewFromListChk.attr('checked', true);\r\n }\r\n\r\n if (!g_openDocForEditByDefault) {\r\n jOpenDocForReadingDefaultChk.attr('checked', true);\r\n } else {\r\n jOpenDocForEditingDefaultChk.attr('checked', true);\r\n }\r\n\r\n if (!needDisableAgentSetts) {\r\n enableRadioButton(jOpenEditorFromListChk);\r\n }\r\n if (!needDisableAgentSetts && !g_isPreviewEnabled && !jOpenCardFromListChk.is(':checked')) {\r\n enableRadioButton(jOpenDocForReadingDefaultChk);\r\n enableRadioButton(jOpenDocForEditingDefaultChk);\r\n }\r\n\r\n if (needDisableAgentSetts) {\r\n disableRadioButton(jOpenEditorFromListChk);\r\n disableRadioButton(jOpenDocForReadingDefaultChk);\r\n disableRadioButton(jOpenDocForEditingDefaultChk);\r\n }\r\n });\r\n return global.settings;\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * DEPRECATED\r\n * Получает параметры тем из JSON файлов, инициализирует контролы\r\n * @function Core.settings.loadThemesData\r\n * @return Core.settings\r\n * @deprecated As of 5.5.0.1801\r\n */\r\n global.settings.loadThemesData = WA.TCD(function (force) {\r\n return global.settings;\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * DEPRECATED\r\n * Предварительная настройка контролов отвечающих за изменение темы.\r\n * @function Core.settings.initThemesEvents\r\n * @return Core.settings\r\n * @deprecated As of 5.5.0.1801\r\n */\r\n global.settings.initThemesEvents = WA.TCD(function () {\r\n return global.settings;\r\n });\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * DEPRECATED\r\n * Установить выбранный пользователем цвет\r\n * @function Core.settings.setCustomColor\r\n * @param {array} rgbColor основной цвет\r\n * @param {boolean} opt_commit нужно ли сохранить значние в профиле\r\n * @deprecated As of 5.5.0.1801\r\n */\r\n global.settings.setCustomColor = function (rgbColor, opt_commit) {\r\n return false;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Применить тему.\r\n * DEPRECATED\r\n * @function Core.settings.applyTheme\r\n * @param {string} name - имя темы(gray, green)\r\n * @param {string} type - вариант темы(dark,light)\r\n * @param {array} backgroundColor - базовый цвет фона, массив [R(int),G(int),B(int)]\r\n * @param {array} textColor - базовый цвет текста, массив [R(int),G(int),B(int)]\r\n * @since 5.0.0.4214\r\n * @return Core.settings\r\n * @deprecated As of 5.5.0.1801\r\n */\r\n global.settings.applyTheme = function (name, type, backgroundColor, textColor) {\r\n return false;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * DEPRECATED\r\n * Смена темы.\r\n * @function Core.settings.changeTheme\r\n * @since 5.0.0.4214\r\n * @return Core.settings\r\n * @deprecated As of 5.5.0.1801\r\n */\r\n global.settings.changeTheme = function (fullName) {\r\n return global.settings;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /*\r\n * Инициализировать настройки управляемых папок.\r\n * @function Core.settings.initManagedFoldersSettings\r\n * @return Core.settings\r\n */\r\n global.settings.initManagedFoldersSettings = WA.TCD(function () {\r\n\r\n $(\".all-managed-folders\").find(\"input[type=checkbox]\").on(\"change\", function () {\r\n changeChildControlsCheckedState($(this).parent());\r\n });\r\n\r\n $(\".single-managed-folder\").find(\"input[type=checkbox]\").on(\"change\", function () {\r\n var jChildContainer = $(this).parent().parent();\r\n var jParentCheckbox = jChildContainer.parent().find(\".all-managed-folders\").find(\"input[type=checkbox]\");\r\n global.settings.updateManagedFoldersLinks([$(this).parent().attr(\"data-control\")], $(this).is(\":checked\"))\r\n var checkedItemsLength = jChildContainer.find(\"input[type=checkbox]:checked\").length;\r\n var allItemsLength = jChildContainer.find(\"input[type=checkbox]\").length;\r\n if ((checkedItemsLength == 0) || (checkedItemsLength != allItemsLength))\r\n jParentCheckbox.prop(\"checked\", false);\r\n else\r\n if (checkedItemsLength == allItemsLength) {\r\n jParentCheckbox.prop(\"checked\", true);\r\n }\r\n });\r\n\r\n return global.settings;\r\n });\r\n\r\n /*\r\n * Обновить ссылки управляемых папок по идентификаторам.\r\n * @return {boolean} Успешное/неуспешное завершение вызова метода веб-сервиса.\r\n */\r\n global.settings.updateManagedFoldersLinks = WA.TCD(function (managedFoldersIDs, pasteLinks) {\r\n ShowTopSpinner();\r\n WA.SRV.call(\"/FolderList.asmx/UpdateManagedFoldersLinks\", {\r\n ManagedFoldersIDs: managedFoldersIDs,\r\n PasteLinks: pasteLinks\r\n }, \"\", \"\", true).always(function (result) {\r\n HideTopSpinner(L('SETTINGS_SAVED'), 2000);\r\n });\r\n return global.settings;\r\n });\r\n\r\n /*\r\n * Изменить состояния дочерних чекбоксов и обновить настройки управляемых папок\r\n * @function changeChildControlsCheckedState\r\n * @param {object} parentControl\r\n */\r\n function changeChildControlsCheckedState(jParentControl) {\r\n var parentControlIsChecked = $(jParentControl).find(\"input[type=checkbox]\").is(\":checked\");\r\n var managedFoldersIDs = [];\r\n jParentControl.parent().find(\".single-managed-folder\").each(function () {\r\n var jChildCheckbox = $(this).find(\"input[type=checkbox]\");\r\n jChildCheckbox.prop(\"checked\", parentControlIsChecked);\r\n managedFoldersIDs.push($(this).attr(\"data-control\"));\r\n });\r\n global.settings.updateManagedFoldersLinks(managedFoldersIDs, parentControlIsChecked);\r\n }\r\n\r\n /**\r\n * Отправить логи на сервер.\r\n *\r\n * @function uploadLogs\r\n * @return {Deferred} Результат выполнения запроса.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.settings.uploadLogs = function () {\r\n var d = $.Deferred();\r\n var toast = new WA.CMP.NTF.Toast();\r\n WA.agent.checkSessionState(1).done(function (isSessionRegistered) {\r\n if (isSessionRegistered) {\r\n WA.agent.uploadLogs().done((response) => {\r\n toast.showMessage(L('ERROR_REPORT_SUCCESS_MESSAGE'));\r\n d.resolve(response);\r\n }).fail((response) => {\r\n toast.showMessage(L('ERROR_REPORT_FAIL_MESSAGE'));\r\n d.reject(response);\r\n });\r\n } else {\r\n ShowWarning(L('LAUNCH_AGENT_TO_SEND_ERROR_REPORT'));\r\n }\r\n }).fail(() => {\r\n ShowWarning(L('LAUNCH_AGENT_TO_SEND_ERROR_REPORT'));\r\n });\r\n\r\n return d.promise();\r\n };\r\n\r\n})(window.Core);\r\n","(function (global) {\r\n\r\n /**\r\n * Функции отвечающие за работу карточек.\r\n * @namespace Core.cards\r\n * @since 5.0.0.7100\r\n */\r\n global.cards = {};\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Удаление строки детального раздела.\r\n * @function Core.cards.deleteTableRow\r\n * @since 5.0.0.7100\r\n * @return Core.cards\r\n */\r\n global.cards.deleteTableRow = function (el, rowNum) {\r\n ConfirmDialogNew({\r\n text: L(\"CONFIRM_TABLE_RECORD_DELETE\"),\r\n okText: L(\"YES\"),\r\n cancelText: L(\"NO\"),\r\n ok: function () {\r\n var tbl = $(el).parents().filter('table:first');\r\n var detailNum = +tbl.data('section');\r\n WA.CR.form.controls.tables[tbl.data('name')].deleteRow(+rowNum);\r\n }\r\n });\r\n return this;\r\n };\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n /**\r\n * Установить доступность кнопок.\r\n * @since 5.5.2201\r\n */\r\n global.cards.enableButtonsOnFormChange = function (buttonNames) { \r\n var toolBar = WA.CR.toolBar;\r\n if (toolBar) {\r\n buttonNames.forEach(function (buttonName) {\r\n var button = toolBar.buttons[buttonName];\r\n if (button) {\r\n button.enable();\r\n }\r\n });\r\n }\r\n };\r\n //---------------------------------------------------------------------//\r\n\r\n /**\r\n * Установить доступность кнопок на ленте при изменении формы.\r\n * @since 5.5.2201\r\n */\r\n global.cards.bindButtonsEnablingOnFormChange = function (buttonNames) {\r\n // Флаг, указывающий необходимость осуществления блокировки кнопок не ленте\r\n // на основе режима доступности\r\n var isControlChangedBefore = false;\r\n $.when(WA.FormControlsInit, WA.FormInit, WA.ToolBarInit).done(() => { \r\n WA.CR.form.bind('change', () => {\r\n global.cards.enableButtonsOnFormChange(buttonNames);\r\n if (!isControlChangedBefore) {\r\n Core.cards.setButtonsEnablingOnEnabledMode();\r\n isControlChangedBefore = true;\r\n }\r\n });\r\n\r\n //подписываем реквизиты карточки на события ввода\r\n bindButtonsEnablingOnMainSectionRequisitesInput(buttonNames);\r\n WA.CR.form.bind('AfterSave', () => { \r\n bindButtonsEnablingOnMainSectionRequisitesInput(buttonNames);\r\n });\r\n bindButtonsEnablingOnDetailSectionRequisitesInput(buttonNames);\r\n });\r\n };\r\n\r\n /**\r\n * Делает конопки доступными при вводе на реквизиты основного раздела\r\n * @param {Array} buttonNames названия кнопок\r\n */\r\n function bindButtonsEnablingOnMainSectionRequisitesInput(buttonNames) {\r\n WA.CR.form.requisites.toArray().forEach((req) => { \r\n req.controls.forEach((jControl) => {\r\n jControl.unbind('input.req keypress.req').one('input.req keypress.req', () => { \r\n global.cards.enableButtonsOnFormChange(buttonNames);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Делает конопки доступными при вводе на реквизиты детального раздела\r\n * @param {Array} buttonNames названия кнопок\r\n */\r\n function bindButtonsEnablingOnDetailSectionRequisitesInput(buttonNames) {\r\n const _bindOnRequisiteKeyPress = (row) => {\r\n row.requisites.toArray().forEach((req) => {\r\n req.bind('editModeChange', (isEditMode) => {\r\n if (isEditMode) {\r\n req.controls.forEach((jControl) => {\r\n jControl.one('input.req keypress.req', () => {\r\n global.cards.enableButtonsOnFormChange(buttonNames);\r\n });\r\n });\r\n } else {\r\n req.controls.forEach((jControl) => {\r\n jControl.unbind('input.req keypress.req');\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n const tables = WA.CR.form.controls.tables;\r\n for (const tableName in tables) {\r\n const table = tables[tableName];\r\n table.rows.toArray().forEach((row) => {\r\n _bindOnRequisiteKeyPress(row);\r\n }); \r\n table.bind('addRow', (row) => { \r\n _bindOnRequisiteKeyPress(row);\r\n });\r\n };\r\n }\r\n\r\n /**\r\n * Установить доступность кнопок на ленте при изменении формы на основе режима доступности.\r\n * @since 5.5.2201\r\n */\r\n global.cards.setButtonsEnablingOnEnabledMode = function () {\r\n WA.CR.toolBar.buttons.getButtonsByEnabledMode(ACTION_ENABLED_MODE.ENABLED_ON_BROWSE).forEach(function (button) {\r\n button.disable();\r\n });\r\n WA.CR.toolBar.buttons.getButtonsByEnabledMode(ACTION_ENABLED_MODE.ENABLED_ON_EDIT).forEach(function (button) {\r\n button.enable();\r\n });\r\n };\r\n\r\n /**\r\n * Если на странице есть растягиваемый iframe предпросмотра,\r\n * сделаем изменения в вёрстке, чтобы контейнер вкладки растянулся на всю высоту.\r\n */\r\n global.cards.initResizablePreviewCard = () => {\r\n const jFrame = $('.CardForm_webbrowser');\r\n if (jFrame.hasClass('webbrowser_resizable')) {\r\n $('#scroller').addClass('scroller scroller_resizable');\r\n\r\n jFrame.css('top',`${jFrame.position().top || 8}px`);\r\n const framePosition = jFrame.position();\r\n jFrame.css({\r\n height: `calc(100% - ${Math.max(framePosition.top + 10, 10)}px)`,\r\n width: `calc(100% - ${Math.max(framePosition.left + 10, 10)}px)`,\r\n });\r\n const jInnerPanel = jFrame.parent();\r\n if (jInnerPanel.attr('name') && jInnerPanel.attr('name').includes('InnerPanel')) {\r\n // iFrame внутри контейнера \"панели\", которую тоже нужно растянуть\r\n jInnerPanel.css({\r\n height: '100%',\r\n width: `calc(100% - ${jInnerPanel.position().left}px)`,\r\n });\r\n const jPanelGroup = jInnerPanel.parent();\r\n const panelGroupPosition = jPanelGroup.position();\r\n jPanelGroup.css({\r\n height: `calc(100% - ${panelGroupPosition.top * 2}px)`,\r\n width: `calc(100% - ${panelGroupPosition.left}px)`,\r\n });\r\n }\r\n }\r\n };\r\n\r\n})(window.Core);\r\n","\"use strict\";\r\n(function gridNamespace(global) {\r\n\r\n /**\r\n * Функции отвечающие за грид\r\n * @namespace Core.grid\r\n * @since 5.2.0.1100\r\n */\r\n global.grid = {};\r\n\r\n /**\r\n * Функции отвечающие за грид списка записей справочника.\r\n * @namespace Core.grid.reference\r\n * @since 5.2.0.1100\r\n */\r\n global.grid.reference = {};\r\n\r\n /**\r\n * Deferred-объект. Сообщает о готовности к использованию Core.grid.reference.\r\n * @namespace Core.grid.referenceInit\r\n * @since 5.4.0.1021\r\n */\r\n global.grid.referenceInit = $.Deferred();\r\n\r\n /**\r\n * Определяем место размещения грида\r\n * @method Core.grid.getPlacementContext\r\n * @return {String}\r\n */\r\n global.grid.getPlacementContext = function () {\r\n if (typeof g_ReferencePlacementContext !== 'undefined') {\r\n return g_ReferencePlacementContext;\r\n } else {\r\n var currentTab = WA.current.sideBar.tabs.current;\r\n if (!!currentTab) {\r\n var prefix;\r\n switch (WA.getLocation()) {\r\n case \"reference\": prefix = \"RefCard\"; break;\r\n case \"doc\": prefix = \"DocCard\"; break;\r\n case \"task\": prefix = \"TaskCard\"; break;\r\n case \"job\": prefix = \"JobCard\"; break;\r\n case \"folder\": prefix = \"FolderCard\"; break;\r\n default: prefix = \"Card\";\r\n }\r\n return prefix + '_' + currentTab.name.toUpperCase();\r\n }\r\n return 'Explorer';\r\n }\r\n }\r\n\r\n})(window.Core);\r\n","(function referenceDataSourceInitLambda(global) {\r\n\r\n // Источник данных для грида.\r\n var ReferenceDataSource = WA.CMP.dataViews.BaseDataProvider.extend({\r\n referenceName: '',\r\n referenceView: '',\r\n initialState: null,\r\n\r\n _cacheID: '',\r\n _saveSateTimeout: null,\r\n\r\n init: function (referenceName, referenceView, placementContext, initialState) {\r\n var me = this;\r\n\r\n me._super(initialState);\r\n\r\n me.referenceName = referenceName;\r\n me.referenceView = referenceView;\r\n me.placementContext = placementContext;\r\n me.initialState = initialState;\r\n\r\n me._cacheID = generateUniqueID();\r\n\r\n me.defaults = {\r\n ReferenceName: me.referenceName,\r\n ReferenceView: me.referenceView,\r\n PlacementContext: me.placementContext\r\n }\r\n },\r\n\r\n makeParams: function (loadOptions) {\r\n var me = this;\r\n loadOptions.CacheID = me._cacheID;\r\n return {\r\n Params: $.toJSON(me.extendDefaults(loadOptions))\r\n }\r\n },\r\n\r\n /**\r\n * Загрузить список записей.\r\n *\r\n * @method load\r\n * @param {Object} loadOptions Опции загрузки.\r\n * @return {Deferred} Загруженные записи.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n load: function (loadOptions) {\r\n var me = this;\r\n var result = new $.Deferred();\r\n var rowsQuery = WA.SRV.call('/Reference.asmx/GetGridRows', me.makeParams(loadOptions));\r\n\r\n // Запрос получения данных уже и так сохраняет состояние в профиле, поэтому предотвращаем отдельные лишние запросы для сохранения состояния.\r\n clearTimeout(me._saveSateTimeout);\r\n\r\n rowsQuery.done(function onDataLoad(data) {\r\n result.resolve($.parseJSON(data));\r\n }).fail(function onDataFail(err) {\r\n log.error(\"GRID\", \"Can not get data for table. \" + err); \r\n result.reject(\"Can not get data for table. \" + err);\r\n });\r\n\r\n return result.promise();\r\n },\r\n\r\n totalCount: function (filter, globalLikeFilter) {\r\n var me = this;\r\n return WA.SRV.call(\"/Reference.asmx/GetRecordCount\", {\r\n ReferenceCode: me.referenceName,\r\n ReferenceView: me.referenceView,\r\n SelectExpression: filter ? filter : \"\", \r\n IgnoreRestrictions: true,\r\n PlacementContext: me.placementContext,\r\n QueryInstanceID: me.initialState.QueryInstanceID,\r\n QueryContext: me.initialState.QueryContext,\r\n GlobalLikeFilter: globalLikeFilter ? globalLikeFilter : \"\"\r\n }).promise();\r\n },\r\n\r\n /**\r\n * Загрузить состояние.\r\n *\r\n * @method loadState\r\n * @return {Deferred} Состояние.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n loadState: function () {\r\n var me = this;\r\n var result = $.Deferred();\r\n result.resolve(me.initialState);\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Сохранить состояние.\r\n *\r\n * @method saveState\r\n * @param {Object} loadOptions Опции загрузки.\r\n * @param {boolean} forceSaveToServer Признак принудительного сохранения на сервере.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n saveState: function (loadOptions, forceSaveToServer) {\r\n var me = this;\r\n var result = $.Deferred();\r\n if (forceSaveToServer !== true) {\r\n // Сохранение состояния теперь при получении данных.\r\n result.resolve();\r\n } else {\r\n clearTimeout(me._saveSateTimeout);\r\n me._saveSateTimeout = setTimeout(function () {\r\n WA.SRV.call('/Reference.asmx/SaveGridState', me.makeParams(loadOptions)).promise().done(function () {\r\n result.resolve();\r\n }).fail(function () {\r\n result.reject();\r\n });\r\n }, 200);\r\n }\r\n return result.promise();\r\n }\r\n });\r\n\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n // Публичные объекты.\r\n global.ReferenceDataSource = ReferenceDataSource;\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.Core.grid);","(function selectListDataProvider(global) {\r\n \"use strict\";\r\n\r\n global.SelectListDataProvider = WA.CMP.dataViews.BaseDataProvider.extend({\r\n className: 'SelectListDataProvider',\r\n _cachedPages: {},\r\n lastLike: '',\r\n lastExpression: '',\r\n settings: null,\r\n lastCurrentPeriodEnabled: null,\r\n\r\n init: function (settings) {\r\n var me = this;\r\n me._super();\r\n me._cachedPages = {};\r\n me.settings = $.extend({}, settings);\r\n },\r\n\r\n /**\r\n * Загрузить список записей справочника.\r\n *\r\n * @method load\r\n * @param {Object} loadOptions Опции загрузки.\r\n * @return {Deferred} Загруженные записи.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n load: function (loadOptions) {\r\n var me = this;\r\n var result = $.Deferred();\r\n var selectedRecords = [];\r\n var notSelectedRecords = [];\r\n var specialRecords = [];\r\n\r\n function getElementIdFromValue(value) {\r\n let id = (\"\" + value).makeSafeString();\r\n if (id === '_') {\r\n switch (value) {\r\n case '+': id = 'APPROVED'; break;\r\n case '?': id = 'DISAPPROVED'; break;\r\n default: id = 'UNSPECIFIED'; break;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n if (loadOptions.selectedRecords && loadOptions.selectedRecords.length) {\r\n selectedRecords = _(loadOptions.selectedRecords).pluck('Value');\r\n }\r\n\r\n //Записи которые были исключены\r\n if (loadOptions.notSelectedRecords && loadOptions.notSelectedRecords.length) {\r\n notSelectedRecords = _(loadOptions.notSelectedRecords).pluck('Value');\r\n }\r\n\r\n //если применили фильтр то придется сбросить кэш\r\n var isCurrentPeriodEnabled = Core.grid.reference.isCurrentPeriodEnabled();\r\n if (loadOptions.like !== me.lastLike || loadOptions.expression !== me.lastExpression || me.lastCurrentPeriodEnabled !== isCurrentPeriodEnabled) {\r\n me._cachedPages = {};\r\n me.lastLike = loadOptions.like;\r\n me.lastExpression = loadOptions.expression;\r\n me.lastCurrentPeriodEnabled = isCurrentPeriodEnabled;\r\n }\r\n\r\n //Если страница есть в кэше, то возьмем из кэша\r\n if (me._cachedPages[loadOptions.page]) {\r\n var records = me._cachedPages[loadOptions.page];\r\n\r\n records = _(records).map(function (record) {\r\n if (!loadOptions.invertedMode) {\r\n record.isSelected = selectedRecords.indexOf(record.value) !== -1\r\n } else {\r\n record.isSelected = notSelectedRecords.indexOf(record.value) === -1\r\n }\r\n return record;\r\n });\r\n \r\n \r\n result.resolve(_(specialRecords.concat(records)).map(function (r) {\r\n r.id = getElementIdFromValue(r.value);\r\n return r;\r\n }));\r\n return result.promise();\r\n }\r\n\r\n WA.SRV.call('/Reference.asmx/GetDistinctRequisiteValues', {\r\n ReferenceCode: me.settings.referenceName || WA.CR.getReferenceCode(),\r\n ReferenceView: me.settings.referenceView || WA.CR.getReferenceView(),\r\n RequisiteName: loadOptions.requisiteName,\r\n Filter: me.settings.filter,\r\n CustomFilter: loadOptions.like,\r\n SelectExpr: loadOptions.expression,\r\n Skip: loadOptions.skip,\r\n Take: loadOptions.take,\r\n QueryInstanceID: me.settings.queryInstanceID,\r\n QueryContext: me.settings.queryContext\r\n }).done(function (records) {\r\n records = _(records).map(function (item) {\r\n return {\r\n value: item.First,\r\n displayValue: $.trim(item.Second),\r\n type: '',\r\n isSelected: (!loadOptions.invertedMode) ? selectedRecords.indexOf(item.First) !== -1 : notSelectedRecords.indexOf(item.First) === -1\r\n }\r\n });\r\n\r\n me._cachedPages[loadOptions.page] = records;\r\n result.resolve(specialRecords.concat(records).map(function (r) {\r\n r.id = getElementIdFromValue(r.value);\r\n return r;\r\n }));\r\n });\r\n\r\n return result.promise();\r\n }\r\n });\r\n\r\n})(Core.grid);","(function referenceGridInitLambda(global) {\r\n\r\n var TEMPLATES = {\r\n LINK_CELL: 'components/grid/linkCell.compile.html'\r\n };\r\n\r\n /**\r\n * Преобразует строку с правилами стиля в html стили.\r\n */\r\n global.getReferenceRecordStyle = function (styleRules) {\r\n var style = \"\";\r\n\r\n // По умолчанию цвет белый, не нужно его прописывать чтобы не ломать темы пользователя.\r\n if (styleRules.TextColor.R + styleRules.TextColor.G + styleRules.TextColor.B > 0)\r\n style = format(\"color: rgb({0},{1},{2}) !important;\",\r\n styleRules.TextColor.R,\r\n styleRules.TextColor.G,\r\n styleRules.TextColor.B);\r\n\r\n if (styleRules.IsBold)\r\n style = style + \"font-weight: bold;\";\r\n\r\n if (styleRules.IsItalic)\r\n style = style + \"font-style: italic;\";\r\n\r\n if (styleRules.IsStrikeOut)\r\n style = style + \"text-decoration: line-through;\";\r\n\r\n return style;\r\n };\r\n\r\n /**\r\n * Обновить данные в форме-список справочника.\r\n */\r\n global.forceReloadData = () => {\r\n setTimeout(() => {\r\n global.reference.updateState({ QueryInstanceID: generateUniqueID() }, true);\r\n global.reference.reloadData();\r\n }, 0);\r\n };\r\n\r\n global.initReference = function (referenceName, referenceView, placementContext, columns, state) {\r\n // Создает объект для формирования ссылки на запись справочника.\r\n var createReferenceRecordObj = function (id) {\r\n return { id: id, kind: \"REF\", refcode: referenceName, refview: referenceView };\r\n };\r\n\r\n // Дополнительная информация по строке записи справочника.\r\n var getReferenceRecordRowAdditionalInfo = function (rowNumber, grid) {\r\n var row = this.getItem(rowNumber);\r\n if (row.__nonDataRow !== true) {\r\n var backgroundColor = \"\";\r\n\r\n if (row.styleRules) {\r\n var backgroundColorObj = JSON.parse(row.styleRules).BackgroundColor;\r\n // По умолчанию цвет белый, не нужно его прописывать чтобы не ломать темы пользователя.\r\n // TODO сделать цвет выделения ячейки смещением от текущего цвета.\r\n if (backgroundColorObj.R + backgroundColorObj.G + backgroundColorObj.B < 765) {\r\n backgroundColor = format(\"background: rgb({0},{1},{2}) !important;\",\r\n backgroundColorObj.R,\r\n backgroundColorObj.G,\r\n backgroundColorObj.B);\r\n }\r\n }\r\n\r\n return {\r\n cssClasses: 'List ' + (Core.grid.reference.grid.getSelectedRows().indexOf(rowNumber) !== -1 ? 'selected' : ''), //FIXME\r\n backgroundColor: backgroundColor,\r\n attributes: {\r\n 'id': row.id,\r\n 'kind': 'REF',\r\n 'compcode': referenceName,\r\n 'data-recid': row.id,\r\n 'data-refcode': referenceName,\r\n 'oncontextmenu': 'var event = arguments[0] || window.event; return Core.grid.reference.openContextMenu(this, event);'\r\n }\r\n };\r\n }\r\n };\r\n\r\n let sourceTabName = '';\r\n WA.ready(function () {\r\n // Событие должно отрабатывать только для той вкладки, на которой оно было добавлено.\r\n // Если убрать эту проверку, то при переходе со вкладки, где есть грид на реактивную вкладку Истории,\r\n // вместо истории мы увидим грид =) В дальнейшем нужно будет пофиксить с полным переходом на React.\r\n const sidebarTabs = WA.CR.sideBar.tabs.toArray();\r\n if (sidebarTabs.length) {\r\n if (!sourceTabName) {\r\n sourceTabName = WA.CR.sideBar.tabs.current.name;\r\n } else if (sourceTabName !== WA.CR.sideBar.tabs.current.name) {\r\n return ;\r\n }\r\n }\r\n\r\n WA.templates.load(TEMPLATES.LINK_CELL).done(function (cellTemplate) {\r\n\r\n var DV = WA.CMP.dataViews;\r\n\r\n var plugins = [\r\n new DV.gridPlugins.SortingPlugin(true),\r\n new DV.gridPlugins.GroupingPlugin(),\r\n new DV.gridPlugins.FooterPlugin(),\r\n new DV.gridPlugins.CheckboxPlugin(),\r\n new DV.gridPlugins.ContextMenuPlugin({ from: 'ReferenceTable', refview: referenceView }),\r\n new DV.gridPlugins.ColumnResizePlugin(),\r\n new DV.gridPlugins.FilteringPlugin(global.SelectListDataProvider)\r\n ];\r\n\r\n var dataSource = new global.ReferenceDataSource(referenceName, referenceView, placementContext, state);\r\n\r\n // Шаблонизатор ячеек.\r\n var referenceRecordsCellTemplate = function (rowNumber, cellNumber, value, columnDef, dataContext) {\r\n var recID = dataContext.id;\r\n value = value || '';\r\n\r\n switch (columnDef.id) {\r\n case '_ContextMenu':\r\n // Метод openContextMenu находится в плагине gridPlugins.ContextMenuPlugin.\r\n return '';\r\n case '_Checkbox':\r\n // Для этой колонки подключается спец. плагин gridPlugins.CheckboxPlugin.\r\n break;\r\n default:\r\n var href = GetObjectCardUrl(createReferenceRecordObj(recID));\r\n // Подсказка.\r\n var hint = {\r\n classes: '',\r\n data: ''\r\n };\r\n\r\n if (columnDef.hint) {\r\n var columnRecId = dataContext[columnDef.id];\r\n hint.classes = 'hint';\r\n hint.data = 'data-hint=\"' + columnDef.hint.replace('%REC_ID%', recID).replace('%REQ_ID%', columnRecId) + '\"';\r\n }\r\n\r\n var style = \"\";\r\n if (dataContext['styleRules']) {\r\n style = global.getReferenceRecordStyle(JSON.parse(dataContext['styleRules']));\r\n }\r\n\r\n var target = \"Ref\" + recID;\r\n\r\n return cellTemplate.render({\r\n style: style,\r\n hint: hint,\r\n value: value,\r\n href: href,\r\n target: target\r\n });\r\n }\r\n };\r\n\r\n var referenceGrid = new DV.Grid('#main_container', dataSource, columns, {\r\n getRowAdditionalInfo: getReferenceRecordRowAdditionalInfo,\r\n cellTemplate: referenceRecordsCellTemplate,\r\n plugins: plugins,\r\n selectListDataProviderSettings: {\r\n referenceName: referenceName,\r\n referenceView: referenceView,\r\n filter: state.GlobalPageFilterLikeQuery,\r\n queryInstanceID: state.QueryInstanceID,\r\n queryContext: state.QueryContext\r\n }\r\n });\r\n\r\n // Для работы клиентской ОМ.\r\n var notifyObjectList = function () {\r\n WA.ObjectListInit.done(function () {\r\n WA.CR.objectList.fire('itemsChange');\r\n });\r\n };\r\n referenceGrid.bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, notifyObjectList).bind(WA.CMP.DV.Grid.EVENT.SELECTED_ROWS_CHANGED, notifyObjectList);\r\n\r\n referenceGrid.bind(WA.CMP.DV.Grid.EVENT.AFTER_DATA_LOADED, function () {\r\n // Инициализируем подсказки к объектам системы.\r\n InitTooltips();\r\n });\r\n referenceGrid.bind(WA.CMP.DV.Grid.EVENT.VIEWPORT_CHANGED, function () {\r\n // Инициализируем подсказки к объектам системы при скроллинге.\r\n InitTooltips();\r\n });\r\n\r\n referenceGrid.bind(WA.CMP.DV.Grid.EVENT.PAGE_CHANGE, function () {\r\n // Инициализируем подсказки к объектам системы при скроллинге.\r\n InitTooltips();\r\n });\r\n\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n // Публичные объекты.\r\n global.reference = referenceGrid;\r\n global.referenceInit.resolve();\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n });\r\n }\r\n\r\n})(window.Core.grid);\r\n","(function detailsDataProviderInitLambda(global) {\r\n\r\n\r\n /** \r\n * Источник данных для грида.\r\n * @since 5.2.0.1300\r\n */\r\n var DetailsDataProvider = WA.CMP.dataViews.BaseDataProvider.extend({\r\n _DetailSectionNumber: null,\r\n _DFMName: null,\r\n\r\n init: function (initialState) {\r\n var me = this;\r\n\r\n me._super(initialState);\r\n me._cacheID = generateUniqueID();\r\n me._DetailSectionNumber = initialState.DetailSectionNumber;\r\n me._DFMName = initialState.DFMName;\r\n \r\n me.defaults = {\r\n ObjectLink: new WA.Link().toLinkModel() \r\n }\r\n \r\n $.extend(me.defaults, initialState);\r\n },\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n _makeKey: function () {\r\n var me = this;\r\n var code;\r\n if (WA.CR.Type === OBJECT_TYPE.EDOCUMENT) {\r\n code = \"\" + WA.CR.CardTypeCode;\r\n }\r\n\r\n if (WA.CR.Type === OBJECT_TYPE.REFERENCE_RECORD) {\r\n code = \"\" + WA.CR.getReferenceCode();\r\n }\r\n return $.toJSON([code, \"\"+WA.CR.getReferenceView(), \"\"+me._DetailSectionNumber]).replaceAll(' ','');\r\n },\r\n\r\n /**\r\n * @since 5.2.0.1300\r\n */\r\n makeParams: function (loadOptions) {\r\n var me = this;\r\n loadOptions.CacheID = me._cacheID;\r\n return me.extendDefaults(loadOptions);\r\n },\r\n\r\n /**\r\n * Загрузить список записей.\r\n *\r\n * @method load\r\n * @param {Object} loadOptions Опции загрузки.\r\n * @return {Deferred} Загруженные записи.\r\n * @since 5.2.0.1300\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n load: function (loadOptions) {\r\n var me = this;\r\n var result = new $.Deferred();\r\n WA.SRV.call('/CardForm.asmx/GetDetailsData', me.makeParams(loadOptions)).always((data) => {\r\n let rowsList = data.Error ? [] : $.parseJSON(data);\r\n result.resolve({ Rows: rowsList });\r\n });\r\n return result.promise();\r\n },\r\n\r\n /**\r\n * Загрузить состояние.\r\n *\r\n * @method loadState\r\n * @return {Deferred} Состояние.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n loadState: function () {\r\n var me = this;\r\n var result = $.Deferred();\r\n var jTable = $('#'+me._DFMName);\r\n\r\n var data = jTable.data('state');\r\n if (data && data[\"ObjectLink\"]) delete data[\"ObjectLink\"]; //В профиле может быть неактуальная ссылка\r\n result.resolve(data);\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * Сохранить состояние.\r\n *\r\n * @param {Object} loadOptions Опции загрузки.\r\n * @param {boolean} forceSaveToServer Признак принудительной загрузки на сервер.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n saveState: function (loadOptions, forceSaveToServer) {\r\n var me = this;\r\n var result = $.Deferred(); \r\n clearTimeout(me._saveSateTimeout);\r\n WA.cache.serverCache.setItem(me._makeKey(), me.makeParams(loadOptions)).done(function () {\r\n result.resolve();\r\n }).fail(function () {\r\n result.reject();\r\n });\r\n return result.promise();\r\n }\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n });\r\n\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n // Публичные объекты.\r\n global.DetailsDataProvider = DetailsDataProvider;\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.Core.grid);","(function detailsGridInitLambda(global) {\r\n\r\n $(function () {\r\n\r\n var Initiializer = WebAccess.components.wrappers.details.DetailsInitiializer;\r\n var detailsInitiializer = new Initiializer('div.Reference_Detail', global.DetailsDataProvider, {}, WA.components.dataViews.gridPlugins.DetailsContextMenu, WA.CR);\r\n detailsInitiializer.bind(Initiializer.EVENT.COMPLETE, function (initiializer) {\r\n global.details = initiializer.gridInstances;\r\n initiializer.waitForData().done(function () {\r\n WA._DetailsGridInit.resolve();\r\n });\r\n });\r\n });\r\n\r\n $.when(WA.FormControlsInit, WA.FormInit, WA.DetailsInit).then(function () {\r\n if (!WA.CR.form.isExist()) return;\r\n\r\n // Логика работы ведущих/ведомых в дательных разделах.\r\n WA.CR.bindLeaderDrivenLogic();\r\n\r\n //Удаляем пустые строки перед сохранением\r\n WA.CR.form.bind(\"prepareSave\", function removeEmptyRows() {\r\n for (var tableName in WA.CR.form.controls.tables) {\r\n var table = WA.CR.form.controls.tables[tableName];\r\n var rows = table.rows.toArray();\r\n var lastRow = rows[rows.length - 1];\r\n\r\n if (rows.length && lastRow && !lastRow.hasFilledRequisites() && !lastRow._locked) {\r\n table.deleteRow(lastRow.getRowId(), true);\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n\r\n})(window.Core.grid);","(function (global) {\r\n\r\n var getGrid = function () {\r\n return Core.grid.reference;\r\n };\r\n\r\n var getReferenceName = function () {\r\n return getGrid()._dataSource.referenceName;\r\n };\r\n\r\n var reloadFiltersAndData = function (params) {\r\n var grid = getGrid();\r\n\r\n var newState = {};\r\n if (typeof params['PageIndex'] !== 'undefined') {\r\n newState.PageIndex = params['PageIndex'];\r\n }\r\n if (typeof params['CurrentFilter'] !== 'undefined') {\r\n newState.CurrentFilter = params['CurrentFilter'];\r\n }\r\n if (typeof params['UnselectAllRecords'] !== 'undefined' && params['UnselectAllRecords'] === true) {\r\n grid.grid.setSelectedRows([]); // Сбросить выделение записей справочника\r\n }\r\n if (typeof params['IsEnabled'] !== 'undefined') {\r\n var currentFilter = newState.CurrentFilter || grid.state.CurrentFilter;\r\n $.extend(newState, {\r\n CurrentFilter: $.extend({}, currentFilter, {\r\n IsEnabled: params['IsEnabled']\r\n })\r\n });\r\n }\r\n\r\n // Обновляем информацию о фильтрах.\r\n grid.updateState(newState);\r\n\r\n if (!!grid.updateFilter) grid.updateFilter();\r\n if (!!grid.updateFooter) grid.updateFooter();\r\n\r\n grid.reloadData(newState).always(function (data) {\r\n // Обновляем информацию о фильтрах.\r\n grid.updateState({\r\n SavedFilters: data.State.SavedFilters\r\n });\r\n global.Filters.setupFiltersState();\r\n });\r\n };\r\n\r\n /**\r\n * Функции отвечающие за работу с пользовательскими фильтрами\r\n * @namespace Filters\r\n * @ignore\r\n */\r\n global.Filters = {\r\n isChanged: false,\r\n currentID: \"0\",\r\n contextMenuElementSelector: '#filters_menu_caption',\r\n contextMenuSettings: { width: 270, shiftY: 37 },\r\n referenceName: WA.CR.getReferenceCode(),\r\n referenceView: WA.CR.getReferenceView(),\r\n placementContext: ''\r\n };\r\n\r\n /**\r\n * Сохраняет список элементов контекстного меню.\r\n * @function Filters.initFilterMenuItems\r\n * @ignore\r\n */\r\n Filters.initFilterMenuItems = function (items, opt_referenceName, opt_referenceView, opt_placementContext) {\r\n Filters.menuItems = items;\r\n Filters.referenceName = opt_referenceName || WA.CR.getReferenceCode();\r\n Filters.referenceView = opt_referenceView || WA.CR.getReferenceView();\r\n Filters.placementContext = opt_placementContext;\r\n if (!Filters.placementContext) {\r\n $.when(WA.SideBarInit).then(function () {\r\n Filters.placementContext = Core.grid.getPlacementContext();\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Создание контестного меню для выбора фильтра справочника(минитулбар, справа)\r\n * @function Filters.createReferenceMenu\r\n * @param {string} selector селектор компоненты\r\n * @param {Array.} data доступные пункты меню\r\n * @ignore\r\n */\r\n Filters.createReferenceMenu = function (selector, data) {\r\n //Здесь сделаем фильтр с идексом 0 последним в списке.\r\n var autoFilter = null;\r\n var saveFilterItemIndex = data.length - 1;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i][\"name\"] == \"0\") {\r\n autoFilter = data[i];\r\n data.splice(i, 1);\r\n };\r\n if (data[i][\"name\"] == \"save_filter\") {\r\n saveFilterItemIndex = i;\r\n }\r\n };\r\n if (!!autoFilter) {\r\n // Убираем с последнего фильтра бордер снизу, т.е. теперь автофильтр последний.\r\n var prevLast = data[saveFilterItemIndex - 1];\r\n if (prevLast['name'] !== '-1') {\r\n prevLast.bottomSeparator = false;\r\n }\r\n autoFilter.bottomSeparator = true;\r\n // Добавялем перед \"Сохранить фильтр\" или в самый конец.\r\n data.splice(saveFilterItemIndex, 0, autoFilter);\r\n }\r\n\r\n try {\r\n var settings = $.extend({}, Filters.contextMenuSettings, selectToolbarBtnOnShowContextMenu(selector));\r\n Filters.currentMenu = new WA.components.menus.BaseContextMenu(selector, data, settings);\r\n Filters.currentMenu.render();\r\n Filters.currentMenu.bind(\"itemSelect\", function (item) {\r\n switch (item.name) {\r\n case 'save_filter':\r\n window.Filters.saveCurrentFilter($(selector));\r\n break;\r\n case 'save_filter_as':\r\n window.Filters.saveCurrentFilterAs($(selector));\r\n break;\r\n case 'delete_filter':\r\n window.Filters.deleteFilter($(selector));\r\n break;\r\n default:\r\n WA.SRV.reference.setFilter(Filters.referenceName, item.name, Filters.referenceView, Filters.placementContext).success(function (newCurrentFilter) {\r\n if (newCurrentFilter.ID !== \"-1\") newCurrentFilter.IsEnabled = true;\r\n reloadFiltersAndData({\r\n CurrentFilter: newCurrentFilter,\r\n PageIndex: 0,\r\n UnselectAllRecords: true\r\n });\r\n // Снимаем выделение с кнопки тулбар, если выбрали \"Без фильтра\".\r\n if (item.name === \"-1\") {\r\n $(selector).removeClass('selected');\r\n } else {\r\n $(selector).addClass('selected');\r\n }\r\n });\r\n };\r\n });\r\n } catch (ex) {\r\n }\r\n };\r\n\r\n\r\n Filters.saveCurrentFilter = function (el) {\r\n Filters.saveFilter(el, false);\r\n };\r\n\r\n Filters.saveCurrentFilterAs = function (el) {\r\n Filters.saveFilter(el, true)\r\n };\r\n\r\n\r\n /**\r\n * Сохранение текущего фильтра в новый\r\n * @function Filters.saveFilter\r\n * @ignore\r\n */\r\n Filters.saveFilter = function (el, createNew) {\r\n if ($(el).hasClass(\"disabled\")) return;\r\n var CP = WA.components;\r\n\r\n var filters = Filters.currentMenu.items;\r\n var options = {};\r\n\r\n for (var i = 0; i < filters.length; i++) {\r\n if (filters[i].name != \"-1\" && filters[i].name != \"0\" && filters[i].name != \"save_filter\" && filters[i].name != \"save_filter_as\" && filters[i].name != \"delete_filter\") {\r\n options[filters[i].name] = filters[i].label;\r\n }\r\n };\r\n\r\n if (Filters.currentID == \"0\" && !$(\".resetFilterState\").is(\":visible\")) {\r\n return ShowMessage(L(\"FILTER_IS_EMPTY\"), L(\"NOTHING_TO_SAVE\"));\r\n };\r\n\r\n var form = new CP.forms.FormBuilder(\"filter_save_modal\")\r\n .setOrientation(\"horizontal\")\r\n .addPick(\"FILTER_NAME\", options, null, null, true, { \"isRequired\": true });\r\n form.displayErrors = \"tip\";\r\n\r\n var dialog = new CP.dialogs.BaseDialog();\r\n dialog.title = createNew ? L(\"SAVE_NEW_FILTER\") : L(\"SAVE_FILTER\");\r\n dialog.html = form.render();\r\n dialog.isShowCancelButton = true;\r\n dialog.ok = function () {\r\n if (form.isValid() === false) return false;\r\n var filterID = form.getValue(\"FILTER_NAME\");\r\n var filterName = form.getDisplayValue(\"FILTER_NAME\");\r\n if (!createNew) {\r\n if (Filters.currentID != \"0\")\r\n WA.SRV.reference.saveFilter(Filters.referenceName, Filters.currentID, filterName, Filters.referenceView, Filters.placementContext).success(function (newCurrentFilter) {\r\n reloadFiltersAndData({\r\n CurrentFilter: newCurrentFilter\r\n });\r\n });\r\n else\r\n if (filterID == \"\") {\r\n WA.SRV.reference.createNewFilter(Filters.referenceName, filterName, Filters.referenceView, Filters.placementContext).success(function (newCurrentFilter) {\r\n reloadFiltersAndData({\r\n CurrentFilter: newCurrentFilter\r\n });\r\n });\r\n } else {\r\n WA.SRV.reference.saveFilter(Filters.referenceName, filterID, filterName, Filters.referenceView, Filters.placementContext).success(function (newCurrentFilter) {\r\n reloadFiltersAndData({\r\n CurrentFilter: newCurrentFilter\r\n });\r\n });\r\n }\r\n } else {\r\n WA.SRV.reference.createNewFilter(Filters.referenceName, filterName, Filters.referenceView, Filters.placementContext).success(function (newCurrentFilter) {\r\n reloadFiltersAndData({\r\n CurrentFilter: newCurrentFilter\r\n });\r\n });\r\n };\r\n };\r\n //$(\"#save_filter\").addClass(\"disabled\").attr(\"title\", L(\"FILTER_NOT_CHANGED\"));\r\n dialog.bind(\"onOpen\", function () {\r\n var autoFilterName;\r\n var index = getElementIndexByAttr(filters, \"name\", \"0\");\r\n if (parseInt(index, 10) >= 0) {\r\n autoFilterName = filters[index].label;\r\n } else {\r\n if (!createNew) {\r\n index = getElementIndexByAttr(filters, \"name\", Filters.currentID);\r\n autoFilterName = filters[index].label;\r\n } else {\r\n var maxFilterID = _(_(filters).map(function (f) {\r\n return +f.name; // Преобразуем в число, что бы вычислить max.\r\n })).max();\r\n autoFilterName = L('AUTO_FILTER_LABEL') + ' ' + Math.max(maxFilterID + 1, 1); //Если фильтров нет, то max вернет -Infinity, а имя фильтра сделаем с номером 1.\r\n }\r\n }\r\n form.setValue(\"FILTER_NAME\", '-1', autoFilterName);\r\n\r\n $(\"#filter_name\").keypress(function (ev) {\r\n if (ev.keyCode == 13) {\r\n dialog.ok();\r\n dialog.close();\r\n };\r\n });\r\n });\r\n dialog.show();\r\n\r\n BindHelpIcoClickOnModalWindow('SaveFilter');\r\n };\r\n\r\n /**\r\n * Удаление текущего фильтра\r\n * @function Filters.removeReferenceMenu\r\n * @ignore\r\n */\r\n Filters.deleteFilter = function (el) {\r\n if ($(el).hasClass(\"disabled\")) return;\r\n var selected = Filters.currentMenu.getSelectedItem();\r\n var dialog = new WA.components.dialogs.BaseDialog();\r\n dialog.title = L(\"CONFIRMATION\");\r\n dialog.height = 'auto',\r\n dialog.isShowCancelButton = true;\r\n dialog.setHtml(format('{0} \"{1}\"?', L(\"FILTER_DELETE_CONFIRMATION\"), escapeHtml(selected.label)));\r\n dialog.bind(\"ok\", function () {\r\n WA.SRV.reference.removeFilter(Filters.referenceName, selected.name, Filters.referenceView, Filters.placementContext).success(function (result) {\r\n clearFilter();\r\n });\r\n });\r\n dialog.show();\r\n };\r\n\r\n /**\r\n * Обновление визуальных компонент ответственных за фильтры.\r\n * Здесь же, происходит выделение текущего фильтра в меню.\r\n * @function Filters.setupFiltersState\r\n * @ignore\r\n */\r\n Filters.setupFiltersState = function () {\r\n var grid = getGrid();\r\n var selectedID = \"-1\";\r\n var filterID = '' + grid.state.CurrentFilter.ID;\r\n Filters.currentID = filterID;\r\n\r\n var filters = grid.state.SavedFilters;\r\n if (!!filters) {\r\n var emptyItem = {\r\n \"name\": \"-1\",\r\n \"label\": L(\"DEFAULT_EMPTY_FILTER\"),\r\n \"bottomSeparator\": true,\r\n 'selected': (filterID === '-1')\r\n };\r\n var wellFormedFilters = [emptyItem];\r\n for (var filterName in filters) {\r\n var item = {\r\n \"name\": filterName,\r\n \"label\": filters[filterName]\r\n };\r\n if (filterName == filterID) {\r\n item.selected = true;\r\n selectedID = filterID;\r\n }\r\n item['stataction'] = \"SetSavedFilter\";\r\n wellFormedFilters.push(item);\r\n };\r\n\r\n // Добавляем кнопки только, если есть компонента для управления фильтрами.\r\n if ($(\"#filters_menu_caption\").length === 0) {\r\n // У последнего фильтра рисуем нижнюю границу.\r\n wellFormedFilters[wellFormedFilters.length - 1]['bottomSeparator'] = true;\r\n\r\n var btnsDisabled = (selectedID === '-1' || typeof grid === \"undefined\"); //Замечание №69912\r\n //TODO Если задизэйблены, то нужно еще и подсказку изменить, но контекстное меню этого не поддерживает.\r\n wellFormedFilters.push({ name: 'save_filter', label: L('SAVE_CURRENT_FILTER'), icon: 'filterSave-16', disabled: btnsDisabled, \"tooltip\": format(\"{0}.\\n{1}.\", L(\"SAVE_CURRENT_FILTER\"), L(\"AVAILABLE_ONLY_IF_FILTER_EXIST\")) });\r\n wellFormedFilters.push({ name: 'save_filter_as', label: L('SAVE_CURRENT_FILTER_AS'), disabled: btnsDisabled, \"tooltip\": format(\"{0}\\n{1}.\", L(\"SAVE_CURRENT_FILTER_AS\"), L(\"AVAILABLE_ONLY_IF_SAVED_FILTER_EXIST\")) });\r\n wellFormedFilters.push({ name: 'delete_filter', label: L('DELETE_CURRENT_FILTER'), icon: 'delete-16', disabled: btnsDisabled, \"tooltip\": format(\"{0}.\\n{1}.\", L(\"DELETE_CURRENT_FILTER\"), L(\"AVAILABLE_ONLY_IF_FILTER_EXIST\")) });\r\n }\r\n\r\n Filters.menuItems = wellFormedFilters;\r\n\r\n if (!!Filters.contextMenuElementSelector)\r\n Filters.createReferenceMenu(Filters.contextMenuElementSelector, wellFormedFilters);\r\n\r\n // Обновляем компоненту управлющую фильтрами.\r\n Filters.updateFilterMenuWidget(filters, selectedID);\r\n\r\n // Устанавливаем активность/неактивность кнопки ленты \"Текущий фильтр\".\r\n Core.toolBars.reference.SetCurrentFilterState();\r\n };\r\n };\r\n /**\r\n * Обновляем компоненту управляющую фильтрами.\r\n * @function Filters.updateFilterMenuWidget\r\n * @ignore\r\n */\r\n Filters.updateFilterMenuWidget = function (filters, selectedID) {\r\n var jFilterMenuWidget = $(\"#filters_menu_caption\");\r\n if (jFilterMenuWidget.length > 0 && !!filters) {\r\n jFilterMenuWidget.text(filters[selectedID]);\r\n\r\n if (selectedID == \"-1\") {\r\n jFilterMenuWidget.text(L(\"DEFAULT_EMPTY_FILTER\"));\r\n emptyItem.selected = true;\r\n } else {\r\n jFilterMenuWidget.text(filters[selectedID].trunc(50));\r\n }\r\n\r\n //Отключение кнопок\r\n //-1 - <Отсутсвует>\r\n if (selectedID === '-1') {\r\n enableFilterActions();\r\n } else {\r\n disableFilterActions();\r\n }\r\n }\r\n };\r\n\r\n /// \r\n /// Очищает фильтр.\r\n /// \r\n /// \r\n Filters.resetFilter = function () {\r\n var grid = getGrid();\r\n //Автофильтр придется тоже удалить\r\n if (grid) {\r\n WA.SRV.reference.removeFilter(Filters.referenceName, \"0\", Filters.referenceView, Filters.placementContext).success(function (result) {\r\n clearFilter();\r\n });\r\n } else {\r\n clearFilter();\r\n }\r\n }\r\n\r\n /// \r\n /// Вкл./выкл фильтр.\r\n /// \r\n /// \r\n Filters.changeFilterState = function (isEnabled) {\r\n var data = {\r\n IsEnabled: isEnabled,\r\n PageIndex: 0 // Перекинуть на первую страницу\r\n };\r\n getGrid().grid.setSelectedRows([]); // Сбросить выделение записей справочника\r\n reloadFiltersAndData(data);\r\n };\r\n\r\n function clearFilter() {\r\n var grid = getGrid();\r\n var currentFilter = grid.state.CurrentFilter;\r\n\r\n var newSavedFilters = grid.state.SavedFilters;\r\n delete newSavedFilters[currentFilter.ID];\r\n\r\n reloadFiltersAndData({\r\n CurrentFilter: $.extend({}, currentFilter, {\r\n ID: '-1',\r\n Name: '',\r\n DisplayValue: '',\r\n DisplayHint: '',\r\n Expression: '',\r\n ColumnsFilter: {}\r\n }),\r\n SavedFilters: newSavedFilters,\r\n PageIndex: 0\r\n });\r\n };\r\n\r\n function enableFilterActions() {\r\n $(\"#delete_filter, #save_filter_as, #save_filter\").removeClass(\"disabled\");\r\n $(\"#delete_filter\").attr('title', L(\"DELETE_CURRENT_FILTER\"));\r\n $(\"#save_filter_as\").attr('title', L(\"SAVE_CURRENT_FILTER_AS\"));\r\n $(\"#save_filter\").attr('title', L(\"SAVE_CURRENT_FILTER\"));\r\n };\r\n function disableFilterActions() {\r\n $(\"#delete_filter, #save_filter_as, #save_filter\").addClass(\"disabled\");\r\n $(\"#delete_filter\").attr('title', L(\"DELETE_CURRENT_FILTER\") + \"\\n\" + L(\"AVAILABLE_ONLY_IF_FILTER_EXIST\"));\r\n $(\"#save_filter_as\").attr('title', L(\"SAVE_CURRENT_FILTER_AS\") + \"\\n\" + L(\"AVAILABLE_ONLY_IF_SAVED_FILTER_EXIST\"));\r\n $(\"#save_filter\").attr('title', L(\"SAVE_CURRENT_FILTER\") + \"\\n\" + L(\"AVAILABLE_ONLY_IF_FILTER_EXIST\"));\r\n };\r\n\r\n})(window);\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n\r\n /** \r\n * Механизм запускающий JS функции из массива handlers когда происходит смена версии веб-доступа;\r\n * @namespace Core.migration\r\n * @since 5.2.0.1100\r\n * @return {boolean}\r\n * @example @see localStorage.js\r\n */\r\n global.migration = {\r\n handlers: [],\r\n\r\n init: function () {\r\n var newVersion = g_Version;\r\n var oldVersion = WA.cache.getItem('version');\r\n \r\n if (newVersion != oldVersion) {\r\n log.warning('DEFAULT', 'Version is changed. Running migration scripts');\r\n for (var handler in this.handlers) {\r\n this.handlers[handler].call(this, oldVersion, newVersion);\r\n };\r\n WA.cache.setItem('version', newVersion);\r\n };\r\n }\r\n };\r\n\r\n\r\n})(window.Core);\r\n\r\n","(function (global) {\r\n\r\n /**\r\n * Некоторые значение в localStorage устаревают от версии к версии. здесь можно \r\n * их очистить.\r\n */\r\n var clearOldCache = function (oldVersion, newVersion) {\r\n log.info('MIGRATION', 'Removing some items from localStorage');\r\n\r\n WA.cache.removeItem('themes/light.css');\r\n WA.cache.removeItem('themes/dark.css');\r\n\r\n };\r\n\r\n global.handlers.push(clearOldCache);\r\n\r\n})(Core.migration);","(function (global) {\r\n\r\n /**\r\n * Некоторые значение в localStorage устаревают от версии к версии. здесь можно \r\n * их очистить.\r\n */\r\n var clearOldTemplates = function (oldVersion, newVersion) {\r\n log.info('MIGRATION', 'Removing old templates from localStorage');\r\n\r\n for (var k in localStorage) {\r\n // Шаблоны пока ни как не отличаются от других элементов хранилища, отличить их можно только так.\r\n if (k.indexOf('.html') !== -1) {\r\n WA.cache.removeItem(k);\r\n }\r\n }\r\n\r\n };\r\n\r\n global.handlers.push(clearOldTemplates);\r\n\r\n})(Core.migration);","\"use strict\";\r\n\r\n(function (global) {\r\n var reportPage = {};\r\n\r\n /**\r\n * Базовый диалог отчетов для вывода ошибок и информационных сообщений.\r\n */\r\n reportPage.ReportDialog = WA.CMP.dialogs.MessageBox.extend({\r\n init() {\r\n this.ok = WA.CR.window.reload;\r\n this.setWidth(500);\r\n this.modal = true;\r\n this.bind(this.class.EVENT.BEFORE_CLOSE_BY_CROSS, () => {\r\n WA.CR.window.close();\r\n });\r\n this.bind(this.class.EVENT.AFTER_CLOSE_BY_OK, () => {\r\n WA.CR.window.reload();\r\n });\r\n }\r\n });\r\n\r\n reportPage.getSpinnerDialog = (reportName) => {\r\n let dialog = new WA.CMP.dialogs.BaseDialog;\r\n dialog.isShowOkButton = false;\r\n dialog.width = 'auto';\r\n dialog.height = 'auto';\r\n dialog.closeOnEscape = false;\r\n\r\n // Невидимая кнопка для того, чтобы сработал setScope и нельзя было на клавиатуре по странице гулять.\r\n dialog.modalWindowButtons.push({\r\n id: 'hiddenButton',\r\n text: '',\r\n click: buttonClick = () => { \r\n return false; \r\n },\r\n Class: 'dialog_hidden_button'\r\n });\r\n\r\n dialog.setSpinner(L('PLEASE_WAIT_DONT_CLOSE_PAGE'));\r\n dialog.setTitle(format(L('PLEASE_WAIT_REPORT'), reportName));\r\n\r\n return dialog;\r\n }\r\n\r\n /**\r\n * Отображение модального окна с текстом ошибки.\r\n * При закрытии окна страница перезагружается.\r\n * @param {string} text Текст ошибки.\r\n */\r\n reportPage.showError = (text) => {\r\n (new reportPage.ReportDialog).show(\r\n text,\r\n null,\r\n L('ERR'),\r\n 'error',\r\n );\r\n };\r\n\r\n /**\r\n * Отображение диалога завершения генерации отчета.\r\n */\r\n reportPage.showFinishDialog = () => {\r\n (new reportPage.ReportDialog).show(\r\n L('COMPLETING_WORKING_WITH_REPORT_MESSAGE'),\r\n null,\r\n L('COMPLETING_WORKING_WITH_REPORT'),\r\n 'info',\r\n );\r\n };\r\n\r\n /**\r\n * Отображение спиннера.\r\n */\r\n reportPage.showSpinner = () => {\r\n WA.CR.spinner.show();\r\n };\r\n\r\n /**\r\n * Скрытие спиннера.\r\n */\r\n reportPage.hideSpinner = () => {\r\n WA.CR.spinner.hide();\r\n };\r\n\r\n global.reportPage = reportPage;\r\n}(window.Core));\r\n\r\n/**\r\n * Инициализация отчета.\r\n */\r\nWebAccess.ready(() => {\r\n if (WA.getLocation() === 'report') {\r\n // Получение имени и заголовка отчета сделано так из-за\r\n // того, что ASP .Net добавляет префиксы\r\n const reportName = $('[id*=_ReportName]').val();\r\n\r\n let report = WA.FC.reports(reportName);\r\n let spinnerDialog = Core.reportPage.getSpinnerDialog(reportName);\r\n\r\n // Перед непосредственным выполнением отчета нужно начинать крутить спиннер.\r\n report.bind(report['class'].EVENT.BEFORE_EXECUTING, () => {\r\n spinnerDialog.show();\r\n });\r\n\r\n // При показе параметров по кнопке Отмена нужно закрывать текущее окно.\r\n report.bind(report['class'].EVENT.ABORT_FILLING_PARAMS, () => {\r\n WA.CR.window.close();\r\n });\r\n\r\n // Начать выполнение отчета.\r\n report.queryParamsAndExecute(true, true).always(() => {\r\n spinnerDialog.close();\r\n }).done((report) => {\r\n report.open();\r\n Core.reportPage.showFinishDialog();\r\n }).fail((ex) => {\r\n Core.reportPage.showError(ex);\r\n });\r\n }\r\n});\r\n","\"use strict\";\r\n\r\n(function (global) {\r\n /**\r\n * Функции отвечающие за работу с реквизитами.\r\n * @namespace Core.requisites\r\n * @since 5.5.0.1000\r\n */\r\n global.requisites = {};\r\n})(window.Core);\r\n","(function ($, global) {\r\n\r\n /**\r\n * Вспомогательные функции реквизита выбора объекта.\r\n * @since 5.5.0.1000\r\n */\r\n var BaseSelectRequisite = Class.extend({\r\n className: 'BaseSelectRequisite',\r\n\r\n _jInput: null,\r\n\r\n // ИД поля компоненты.\r\n controlId: '',\r\n // Страница для проверки в парсинге ссылок. doc.asp или reference.asp\r\n linkPageName: '',\r\n // Множественный выбор или нет.\r\n isMultiSelect: false,\r\n\r\n // Конструктор.\r\n init: function (options) {\r\n var me = this;\r\n $.extend(me, options);\r\n\r\n if ($(\"input#\" + me.controlId).length) {\r\n me._initControl();\r\n } else\r\n $(function () {\r\n setTimeout(me._initControl.bind(me), 0);\r\n });\r\n },\r\n\r\n _initControl: function () {\r\n var me = this;\r\n\r\n me._jInput = $(\"input#\" + me.controlId);\r\n me._jHidden = $('#hSelID_' + me.controlId);\r\n\r\n me._bindOnPaste();\r\n },\r\n\r\n // Инициализирует компоненту.\r\n _bindOnPaste: function () {\r\n var me = this;\r\n me._jInput.on('paste', me._onPaste.bind(me));\r\n },\r\n\r\n // Обработка вставки ссылки.\r\n _onPaste: function (event) {\r\n var me = this;\r\n\r\n var clipboardData = event.originalEvent.clipboardData || window.clipboardData;\r\n var pastedData = clipboardData.getData('text');\r\n\r\n if (pastedData) {\r\n var links = me._parsePastedDataAndGetLinks(pastedData);\r\n if (links && links.length > 0) {\r\n me._loadExtendedDataForLinks(links).done(function (extendedLinks) {\r\n me._setValueByLinks(extendedLinks);\r\n }).fail(function (err) {\r\n // Если нет прав или какая-то ошибка, просто вставим в поле текст из буфера (так в билдере).\r\n me._jInput.val(pastedData);\r\n });\r\n } else {\r\n // Если нет ссылок, просто вставим в поле текст из буфера.\r\n me._jInput.val(pastedData);\r\n }\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n },\r\n\r\n /**\r\n * Загружает дополнительнные данные для ссылок. Например, наименование или ведущие реквизиты.\r\n *\r\n * @method _loadExtendedDataForLinks\r\n * @param {Array} links Список ссылок.\r\n * @return {Deferred>} Список ссылок с загруженными дополнительными данными.\r\n * @private\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _loadExtendedDataForLinks: function (links) {\r\n //Надо переопределять в потомках.\r\n var d = $.Deferred();\r\n d.resolve(links.map(function (link) {\r\n link.name = link.id;\r\n return link;\r\n }));\r\n return d.promise();\r\n },\r\n\r\n // Устанавливает значение в реквизиты выбора на основе распарсенных ссылок.\r\n _setValueByLinks: function (extendedLinks) {\r\n var me = this;\r\n if (me.isMultiSelect) {\r\n var values = extendedLinks.map(function (extendedLink) {\r\n return me._convertLinkToReferenceSelectValue(extendedLink);\r\n });\r\n me._jInput.SetValues(values, true);\r\n } else {\r\n me._jInput.SetValue(me._convertLinkToReferenceSelectValue(extendedLinks[0]), true);\r\n }\r\n },\r\n\r\n // Конвертирует ссылку в значение, которое принимает реквизиты выбора.\r\n _convertLinkToReferenceSelectValue: function (extendedLink) {\r\n //TODO Надо значения ведущих реквизитов.\r\n return [extendedLink.id, extendedLink.name.escapeHtml(), extendedLink.name, '{}'];\r\n },\r\n\r\n // Парсит текст, вставленный из буфера, и возвращает первую ссылку на объект.\r\n _parsePastedDataAndGetLinks: function (pastedData, isMultiSelect) {\r\n var me = this;\r\n var pastedLines = pastedData.split('\\n');\r\n var links = [];\r\n for (var i = 0; i < pastedLines.length; i++) {\r\n var line = pastedLines[i];\r\n var link = me._parsePastedLine(line);\r\n if (link) {\r\n links.push(link);\r\n if (!isMultiSelect) {\r\n break;\r\n }\r\n }\r\n }\r\n return links;\r\n },\r\n\r\n // Парсит одну строку, вставленную из буфера.\r\n _parsePastedLine: function (line) {\r\n var me = this;\r\n var lineLowered = line.toLowerCase();\r\n\r\n me._webServerNameLowered = me._webServerNameLowered || g_WebServerName.toLowerCase();\r\n me._sysCodeLowered = me._sysCodeLowered || g_SysCode.toLowerCase();\r\n\r\n //NOTE Шамов А.: Не сделал регуляркой, потому что нужно экранировать спец.символы в _webServerNameLowered и _sysCodeLowered и она получается сложнее.\r\n\r\n if (lineLowered.indexOf(me._webServerNameLowered) !== -1 &&\r\n lineLowered.indexOf(me._sysCodeLowered) !== -1 &&\r\n lineLowered.indexOf('/' + me.linkPageName) !== -1) {\r\n return me._parseSuitableUrl(line);\r\n }\r\n return null;\r\n },\r\n\r\n // Парсинг подходящей строки в ссылку.\r\n _parseSuitableUrl: function (url) {\r\n //Надо переопределять в потомках.\r\n return null;\r\n },\r\n\r\n });\r\n\r\n global.BaseSelectRequisite = BaseSelectRequisite;\r\n\r\n})(jQuery, window.Core.requisites);\r\n","(function ($, global) {\r\n\r\n /**\r\n * Вспомогательные функции реквизита \"Документ\".\r\n * @since 5.5.0.1000\r\n */\r\n var DocumentSelectRequisite = global.BaseSelectRequisite.extend({\r\n className: 'DocumentSelectRequisite',\r\n\r\n // Инициализирует компоненту.\r\n _initControl: function () {\r\n var me = this;\r\n me._super();\r\n\r\n var jInput = me._jInput;\r\n\r\n jInput.parent().hover(\r\n function () { me._showAdditionalButtons(this, jInput, me.isAccessDenied); },\r\n function () { me._hideAdditionalButtons(this, jInput); }\r\n );\r\n\r\n jInput.on('contextmenu', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n });\r\n\r\n var referenceSelectPluginSettings = me.referenceSelectPluginSettings || jInput.data('settings');\r\n referenceSelectPluginSettings = $.extend(referenceSelectPluginSettings, {\r\n hidd: me._jHidden,\r\n dataProvider: window.Core.requisites.DocumentSelectDataProvider\r\n });\r\n jInput.ReferenceSelect(referenceSelectPluginSettings, jInput.parent().parent().find('div.Req_Icon'));\r\n\r\n jInput.result(function (event, data) {\r\n me._attachResult(\r\n jInput,\r\n data,\r\n me.afterSelectCallback,\r\n me.isNeedCallAfterSelectCallbackOnClear\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Загружает дополнительнные данные для ссылок. Например, наименование или ведущие реквизиты.\r\n *\r\n * @method _loadExtendedDataForLinks\r\n * @param links Массив ссылок.\r\n * @return {Deferred} Ссылка с загруженныеми данными.\r\n * @private\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _loadExtendedDataForLinks: function (links) {\r\n var d = $.Deferred();\r\n\r\n var link = links[0]; // множественный выбор пока что не поддерживаем не мы, не билдер.\r\n\r\n //setTimeout нужен для IE11, т.к. этот метод вызывается в событии onPaste и IE блокирует запросы в нем. Решение от сюда https://stackoverflow.com/questions/26910691/jquery-ajax-request-ie11-access-is-denied\r\n setTimeout((function (_link) {\r\n return function () {\r\n WA.SRV.document.getNameById([_link.id]).done(function (documentName) {\r\n _link.name = documentName;\r\n d.resolve([_link]);\r\n }).fail(function (err) {\r\n d.reject(err);\r\n });\r\n };\r\n })(link), 1);\r\n\r\n return d.promise();\r\n },\r\n\r\n // Парсинг подходящей строки в ссылку.\r\n _parseSuitableUrl: function (url) {\r\n var idIndex = url.toLowerCase().indexOf('&id=');\r\n if (idIndex !== -1) {\r\n var idStr = url.substr(idIndex + 4); //+4 это пропуск \"&id=\", parseInt отбрасывает всё ненужно после первых цифр, поэтому нам не важно где кончается id. Например, parseInt('123¶m=value') -> 123\r\n var id = parseInt(idStr, 10);\r\n return new WA.Link(id, OBJECT_TYPE.EDOCUMENT);\r\n }\r\n return null;\r\n },\r\n\r\n // Обработка выбора документа в выпадающем списке.\r\n _attachResult: function (inp, data, afterSelectFunc, isNeedCallFuncOnClear) {\r\n if (data) {\r\n if ($.isFunction(afterSelectFunc)) afterSelectFunc(data[0]);\r\n } else {\r\n //вызываем функцию если поле очищено\r\n if (isNeedCallFuncOnClear) afterSelectFunc(null);\r\n inp.SetValue(null);\r\n }\r\n inp.change();\r\n },\r\n\r\n // Показать дополнительные кнопки.\r\n _showAdditionalButtons: function (container, inp, isAccessDenied) {\r\n var jIcons = $(container).find('.Req_AdditionalIcons');\r\n jIcons.show();\r\n\r\n var jOpenIco = jIcons.find('.OpenCardIco');\r\n var jOpenBodyIco = jIcons.find('.OpenBodyIco');\r\n\r\n var selVal = $('#hSelID_' + inp.attr('id')).val();\r\n if (selVal != null && selVal !== '*' && !isAccessDenied && (inp.data('selected') == \"true\" || inp.data('selected') == \"selected\" || inp.data('selected') === true) && /^\\d+$/.test(selVal)) {\r\n jOpenIco.show();\r\n jOpenBodyIco.show();\r\n } else {\r\n jOpenIco.hide();\r\n jOpenBodyIco.hide();\r\n }\r\n },\r\n\r\n // Скрыть дополнительные кнопки.\r\n _hideAdditionalButtons: function (container, inp) {\r\n $(container).find('.Req_AdditionalIcons').hide().find('p').hide();\r\n }\r\n\r\n }, {\r\n // Тут статические методы.\r\n\r\n // Открыть карточку выбранного документа.\r\n openSelected: function (jOpenIco, inputId) {\r\n var selVal = $('#hSelID_' + inputId).val();\r\n var link = new WA.Link(+selVal, OBJECT_TYPE.EDOCUMENT);\r\n link.open();\r\n },\r\n\r\n // Открыть тело выбранного документа.\r\n openSelectedBody: function (jOpenIco, inputId) {\r\n var docId = +$('#hSelID_' + inputId).val();\r\n\r\n if (g_defaultListAction === 'open') {\r\n OpenWithAgent({ id: docId }, true);\r\n return;\r\n } else if (g_defaultListAction === 'viewineditor') {\r\n OpenWithAgent({ id: docId }, false);\r\n return;\r\n }\r\n\r\n // Если ничего не получилось, то открываем предпросмотр.\r\n ExportEDoc(docId, true, 0, true);\r\n\r\n }\r\n });\r\n\r\n global.DocumentSelectRequisite = DocumentSelectRequisite;\r\n\r\n})(jQuery, window.Core.requisites);\r\n","(function ($, global) {\r\n\r\n /**\r\n * Провайдер данных для выбора из справочника.\r\n * @since 5.5.0.1000\r\n */\r\n var DocumentSelectDataProvider = {\r\n /**\r\n * Отправляет запрос на сервер и обрабатывает результаты.\r\n * @param {string} url Адрес веб-сервиса или веб-хэндлера.\r\n * @param {Object} params Список параметров веб-сервиса или веб-хэндлера.\r\n * @param {successCallback} OnSuccess Функция, вызываемая при удачном выполнении запроса от сервера.\r\n * @param {errorCallback} OnError Функция, вызываемая при НЕ удачном выполнении запроса от сервера.\r\n * @returns {jqXHR} Объект запроса возвращаемой функцией jQuery.ajax.\r\n */\r\n sendQuery: function (url, params, OnSuccess, OnError) {\r\n var me = this;\r\n\r\n return WA.SRV.call('/api/LinkQuery.asmx/GetDocumentsFromQueryContext', {\r\n queryContext: $.parseJSON(params.queryContext),\r\n queryString: params.q,\r\n pageSize: params.limit,\r\n pageNumber: params.page,\r\n sortRequisite: 'ISBEDocTextModifyDate',\r\n sortDirection: -1\r\n }, null, null, true, true).done(function (data) {\r\n var entities = $.parseJSON(data).map(function (docLink) {\r\n var iconName = g_ImgsByDocExt[docLink.ext.toLowerCase()];\r\n if (!iconName) iconName = 'documentUnknown';\r\n var editorIcon = ' ';\r\n var signIcon = '';\r\n switch (docLink.sign) {\r\n case 'APPR':\r\n signIcon = '';\r\n case 'AUTH':\r\n signIcon = '';\r\n }\r\n var icon = '' + editorIcon + signIcon + '';\r\n return {\r\n id: docLink.id,\r\n encodedTitle: icon + docLink.name.escapeHtml(),\r\n title: docLink.name,\r\n leadingRequisitesValue: \"{}\"\r\n };\r\n });\r\n\r\n if (OnSuccess) OnSuccess(1000000, entities);\r\n\r\n }).fail(function (errorMessage) {\r\n if (OnError) OnError(errorMessage, false);\r\n });\r\n }\r\n };\r\n\r\n global.DocumentSelectDataProvider = DocumentSelectDataProvider;\r\n\r\n})(jQuery, window.Core.requisites);\r\n","(function ($, global) {\r\n\r\n /**\r\n * Вспомогательные функции реквизита \"Выбор из справочника\".\r\n * @since 5.5.0.1000\r\n */\r\n var ReferenceRecordSelectRequisite = global.BaseSelectRequisite.extend({\r\n className: 'ReferenceRecordSelectRequisite',\r\n\r\n /**\r\n * Загружает дополнительнные данные для ссылок. Например, наименование или ведущие реквизиты.\r\n *\r\n * @method _loadExtendedDataForLinks\r\n * @param {Array} links Список ссылок.\r\n * @return {Deferred>} Список ссылок с загруженными дополнительными данными.\r\n * @private\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n _loadExtendedDataForLinks: function (links) {\r\n //Надо переопределять в потомках.\r\n var d = $.Deferred();\r\n d.resolve(links.map(function (link) {\r\n link.name = '' + link.id;\r\n return link;\r\n }));\r\n return d.promise();\r\n },\r\n\r\n // Парсинг подходящей строки в ссылку.\r\n _parseSuitableUrl: function (url) {\r\n // Пример ссылки http://irwebaccess:83/reference.asp?sys=DIR55WebAccess&compcode=%ce%d0%c3&id=134049\r\n\r\n var idIndex = url.toLowerCase().indexOf('&id=');\r\n if (idIndex !== -1) {\r\n var idStr = url.substr(idIndex + 4); //+4 это пропуск \"&id=\", parseInt отбрасывает всё ненужно после первых цифр, поэтому нам не важно где кончается id. Например, parseInt('123¶m=value') -> 123\r\n var id = parseInt(idStr, 10);\r\n //TODO\r\n var compcode = '';\r\n return new WA.Link(id, OBJECT_TYPE.REFERENCE_RECORD, compcode);\r\n }\r\n return null;\r\n }\r\n });\r\n\r\n global.ReferenceRecordSelectRequisite = ReferenceRecordSelectRequisite;\r\n\r\n})(jQuery, window.Core.requisites);\r\n","/// \r\n/// \r\n\r\nfunction CreateSubTaskFromListActions(obj, el) {\r\n obj['tr'] = $(el).parents('#' + obj.id);\r\n CreateSubTaskFromContextMenu(obj);\r\n}\r\n\r\nfunction CreateSubTaskFromContextMenu(parent) {\r\n var newCard;\r\n var OnError = function (error) {\r\n newCard.close();\r\n ShowError(error, null, 400);\r\n };\r\n\r\n function DoIt(decryptedKey) {\r\n var newTaskID;\r\n var serviceName;\r\n var serviceParams;\r\n //Создаём подзадачу\r\n\r\n if (parent.kind == \"task\") {\r\n serviceName = 'Task.asmx';\r\n serviceParams = { TaskID: parent.id, EncryptionKey: decryptedKey };\r\n } else {\r\n serviceName = 'Job.asmx';\r\n serviceParams = { JobID: parent.id, EncryptionKey: decryptedKey };\r\n }\r\n\r\n CallService(serviceName + '/CreateSubTask', serviceParams,\r\n function (res) {\r\n if (!res.Success) OnError(res.Error);\r\n else {\r\n newTaskID = res.Result;\r\n if (!!newTaskID) {\r\n parent.id = newTaskID;\r\n parent.kind = \"task\";\r\n var params = \"mode=edit\";\r\n newCard.location = GetObjectCardUrl(parent, params);\r\n newCard.focus();\r\n }\r\n }\r\n },\r\n OnError);\r\n }\r\n\r\n var encoding = parent.tr.attr('encoding');\r\n var pleaseWait = new WA.URL('/PleaseWait.aspx');\r\n pleaseWait.setParam('message', L('PLEASE_WAIT_TASK'));\r\n\r\n if (encoding > 0) {\r\n // Не поддерживаем работу с зашифрованными объектами.\r\n (new WA.CMP.dialogs.MessageBox()).showWarning(L('ERR_ENCODED_OBJECT_ARE_NOT_SUPPORTED'));\r\n\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n var pluginName = parent.tr.attr('encpluginname');\r\n switch (encoding) {\r\n case '1':\r\n newCard = pleaseWait.open(parent.kind + parent.id);\r\n if (parent.kind == 'task') {\r\n WebAccess.agent.edms.getTaskDecryptedKey(parent.id, encoding, pluginName, \"\", DoIt, OnError);\r\n } else {\r\n WebAccess.agent.edms.getJobDecryptedKey(parent.id, encoding, pluginName, \"\", DoIt, OnError);\r\n }\r\n break;\r\n case '2':\r\n case '3':\r\n RequestPasswordForDecryption('',\r\n function (password) {\r\n newCard = pleaseWait.open(parent.kind + parent.id);\r\n if (parent.kind == 'task') {\r\n WebAccess.agent.edms.getTaskDecryptedKey(parent.id, encoding, pluginName, password, DoIt, OnError);\r\n } else {\r\n WebAccess.agent.edms.getJobDecryptedKey(parent.id, encoding, pluginName, password, DoIt, OnError);\r\n }\r\n });\r\n break;\r\n }\r\n });\r\n } else {\r\n newCard = pleaseWait.open('sub' + parent.kind + parent.id);\r\n\r\n //IOS замораживает вкладки, которые висят в фоне, поэтому к сожалению фабрики и асинхронные запросы в нем отдыхают\r\n if (WA.ENV.os.name.toLowerCase() === 'ios') {\r\n var folderId = WA.CR.getID() || OutboxFolderID;\r\n var page = (parent.kind == 'task' ? 'Task' : 'Job');\r\n var pageUrl = (new WA.URL('/' + page + '.aspx'));\r\n if (parent.kind == 'task') {\r\n pageUrl.setParam('mode', 'newsubtask');\r\n } else {\r\n pageUrl.setParam('op', 'newsubtask');\r\n }\r\n pageUrl.setParam('id', parent.id).setParam('folder', folderId).openIn(newCard);\r\n return;\r\n }\r\n\r\n DoIt(null);\r\n }\r\n}\r\n\r\n\r\n// Показывает запрашиваемые параметры для ззу.\r\n// id - id задачи или задания.\r\n// type - \"job\" или \"task\".\r\nfunction ShowAskableParams(id, type, block = null) {\r\n id = id || GetParamInURL('id');\r\n type = type || (/job\\.aspx/i.test(location.pathname) ? 'job' : 'task');\r\n ShowModalWindow(\"askable_params\", {\r\n title: L(\"CUSTOMWORK_ASKABLE_PARAMS\"),\r\n ok: () => {\r\n const jModalWindow = $('#modal_window');\r\n jModalWindow.data('success', () => {\r\n jModalWindow.data('ok', true);\r\n jModalWindow.dialog('close');\r\n if (WA.CR.Type === OBJECT_TYPE.JOB) {\r\n Core.jobs.performJob(id, block)\r\n } else {\r\n WA.CR.openReactTab(TAB_TYPE.TASK_CARD, true);\r\n }\r\n });\r\n jModalWindow.find('form').submit();\r\n return false;\r\n },\r\n close: () => {\r\n const modal = $('#modal_window');\r\n if (WA.CR.Type === OBJECT_TYPE.TASK) {\r\n if (!modal.data('ok')) {\r\n WA.SRV.request('/Task.asmx/SetStandardRoute', {\r\n TaskID: id,\r\n StandardRouteID: 0,\r\n }).done(() => {\r\n modal.dialog('close');\r\n WA.CR.openReactTab(TAB_TYPE.TASK_CARD, true);\r\n });\r\n }\r\n }\r\n },\r\n params: { WorkID: id, WorkType: type, WorkflowBlock: block },\r\n height: \"auto\",\r\n width: 700,\r\n afterOpen() {\r\n setTimeout(() => {\r\n //иначе форма не растягивается при ListRequisite\r\n $('#modal_window').css('height', 'auto');\r\n //вызов события после показа окна с запрашиваемыми параметрами\r\n if (type === 'job') {\r\n WebAccess.Job.fire('AfterShow');\r\n }\r\n if (type === 'task') {\r\n WebAccess.Task.fire('AfterShow');\r\n }\r\n\r\n const currentDialog = $('.ui-dialog');\r\n\r\n // Установкаа запрашиваемых параметров по\r\n currentDialog.keydown(event => {\r\n if (event.keyCode === 13) {\r\n const jTarget = $(event.target);\r\n\r\n // Проверка на справочник\r\n if (jTarget.tagName !== 'textarea' && !jTarget.closest('.reference_requisite, .Req_Pick').length) {\r\n this.ok();\r\n }\r\n }\r\n });\r\n\r\n // при перетаскивании диалога слетает высота и кнопки ОК/Отмена также могут уходить за границы видимой области\r\n currentDialog.on('dragstop', () => {\r\n currentDialog.css('height', 'auto');\r\n });\r\n }, 50);\r\n }\r\n });\r\n $('#modal_window').css('overflow', 'auto');\r\n}\r\n\r\nfunction ClearOpAfterError() {\r\n var id = GetParamInURL('id');\r\n CallService(\"/Task.asmx/SetStandardRoute\", { TaskID: id, StandardRouteID: 0 }, function () {\r\n $('#modal_window').dialog('close');\r\n DoAction(\"-op\")\r\n });\r\n}\r\n\r\nfunction ShowErrorOnAskableParams(text) {\r\n ShowMessage(text, L(\"CUSTOMWORK_ASKABLE_PARAMS\"), ClearOpAfterError, null, null, null, true);\r\n}\r\n\r\n// Показывает окно выбора типового маршрута.\r\nfunction ChangeStandartRoute() {\r\n ShowModalWindow('standard_route', {\r\n title: L('STANDARD_ROUTE'),\r\n ok: () => {\r\n const jModalWindow = $('#modal_window');\r\n const routeId = jModalWindow.find('#hSelID_route').val();\r\n SetStandardRoute(WA.CR.ID, routeId, null, (errMessage) => {\r\n jModalWindow.data('error')(errMessage);\r\n });\r\n return false;\r\n },\r\n params: {\r\n TaskID: WA.CR.ID,\r\n }\r\n });\r\n}\r\n\r\nfunction SetStandardRoute(TaskID, StandardRouteID, OnSuccess, OnError) {\r\n getStandardRouteCodeByID(StandardRouteID, function (data) {\r\n var standardRouteCode;\r\n var setStandardRouteCallback = function () {\r\n CallService(\"/Task.asmx/SetStandardRoute\", { TaskID: TaskID, StandardRouteID: StandardRouteID }, function (res) {\r\n if (res.Success) {\r\n if (OnSuccess) {\r\n var r = OnSuccess();\r\n if (r === false) {\r\n return;\r\n }\r\n }\r\n if (res.Result) {\r\n ShowAskableParams(TaskID, 'task');\r\n } else {\r\n DoAction(\"op=ChangeRoute\");\r\n }\r\n if (OnSuccess) OnSuccess();\r\n } else {\r\n if (OnError) {\r\n OnError(res.Error);\r\n }\r\n }\r\n });\r\n };\r\n\r\n // если запрос выполнился успешно и вернул только одну запись (если больше, то что-то явно не то - по одному ИД может быть только одна запись).\r\n // третье условие - что венрнулся только Код записи.\r\n if (data.Success && data.Result.length == 1 && data.Result[0].Requisites.length == 1) {\r\n standardRouteCode = $.trim(data.Result[0].Requisites[0].Value);\r\n }\r\n\r\n // Если для ТМа с кодом standardRouteCode есть означенные события, то выполним событие \"До запроса параметров\".\r\n if (typeof WebAccess.Events[standardRouteCode] != 'undefined') {\r\n WebAccess.Task.fireAll(\"Select\", setStandardRouteCallback, standardRouteCode);\r\n } else {\r\n setStandardRouteCallback();\r\n }\r\n }, function () {\r\n ClearOpAfterError();\r\n });\r\n}\r\n\r\nfunction ShowWarningForTaskRouteException(msg) {\r\n var _showWarningFunc = function (callback) {\r\n ShowMessage(msg, L('WARNING'), null, L('OK'), 600, callback, false);\r\n };\r\n var _isModalShown = IsModalShown();\r\n\r\n HideTopSpinner('', 0, null, _isModalShown);\r\n setTimeout(function () {\r\n if (_isModalShown) {\r\n // Отключаем горячие главищи вообще, что бы Enter на кнопке ОК в окне ошибки сработал нормально. Для этого же и setTimeout\r\n key.setScope('');\r\n _showWarningFunc(function () {\r\n key.setScope('modalwindow');\r\n });\r\n } else {\r\n _showWarningFunc();\r\n }\r\n }, 100);\r\n}\r\n\r\n// Получает выбранные элементы (либо в диалоге, если он показан, либо в выборе из справочника).\r\nfunction GetRouteSelectedItemsCount() {\r\n var inps = [$(\"#CardContrrolRoute\"), $('#CardContrrolObservers')];\r\n var count = 0;\r\n for (var i = 0; i < inps.length; i++) {\r\n var inp = inps[i];\r\n var ms = inp.data('MultiSelectModalWindowInstance');\r\n if (ms && ms.isModalShown()) {\r\n count += ms.dataObject.selectedItems.length;\r\n } else if (inp.length > 0) {\r\n const referenceSelectInstance = inp.data('ReferenceSelectInstance');\r\n if (referenceSelectInstance) {\r\n count += referenceSelectInstance.getValues().length;\r\n }\r\n }\r\n }\r\n return count;\r\n}\r\n\r\n// Событие после смены маршрута с множественным выбором.\r\nfunction TaskRouteChanged(inp, data, UsersRefName, UserGroupsRefName, StandardRoutesRefName, RouteLastObjectsRefName, isInModal) {\r\n var selItem;\r\n var isNeedToAddLastObject = true;\r\n if (!data || data.length == 0)\r\n return;\r\n\r\n if (!$.isPlainObject(data[0])) {\r\n // Данные выбраны через стандартное выпадающее меню.\r\n var id = data[0];\r\n var idParts = id.split(':');\r\n var refCode = '';\r\n if (idParts.length == 2) {\r\n refCode = idParts[0];\r\n id = idParts[1];\r\n } else {\r\n refCode = UsersRefName;\r\n };\r\n selItem = { groupcode: refCode, id: id, name: data[2] };\r\n } else {\r\n // Данные выбраны через модальное окно.\r\n selItem = data[0];\r\n // После нажатии на кнопку ОК уже не добавляем в последние объекты, т.к. уже были добавлены при переносе в правую часть.\r\n isNeedToAddLastObject = !!isInModal;\r\n };\r\n\r\n // Сохраним элемент для замены, т.к. возможно мы его изменим ниже.\r\n var itemToReplace = { groupcode: selItem.groupcode, id: selItem.id, name: selItem.name };\r\n\r\n // Если это псевдосправочник \"Последние объекты в маршруте\", то получим настоящий справочник и ИД выбираемой записи.\r\n if (selItem.groupcode === RouteLastObjectsRefName) {\r\n var idParts = selItem.id.split(\"_\");\r\n if (idParts.length == 2) {\r\n selItem.groupcode = idParts[0];\r\n selItem.id = idParts[1];\r\n };\r\n };\r\n\r\n // Функция TaskRouteChanged срабатывает при нажатии на кнопку \"ОК\" в модальном диалоге, в этом случае, добавлять последние объекты не нужно,\r\n // т.к. они уже были добавлены при переносе в правую часть.\r\n // Добавляем к последним объектам, только корректные объекты.\r\n if (isNeedToAddLastObject && selItem.id > 0) {\r\n WA.SRV.session.addLastUsedObject(selItem.groupcode, selItem.id, selItem.name);\r\n }\r\n\r\n switch (selItem.groupcode) {\r\n case UsersRefName:\r\n //Текущее кол-во элементов поля\r\n if (typeof MAX_ROUTE_PARTICIPANT_COUNT !== 'undefined' && MAX_ROUTE_PARTICIPANT_COUNT !== null) {\r\n var CurrentUsersCount = GetRouteSelectedItemsCount();\r\n if (CurrentUsersCount > MAX_ROUTE_PARTICIPANT_COUNT) {\r\n inp.ReplaceLastSelectedItem(itemToReplace.groupcode + ':' + itemToReplace.id, []);\r\n ShowWarningForTaskRouteException(L(\"TO_MANY_ITEMS\"));\r\n } else {\r\n if (!IsModalShown()) {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n }\r\n };\r\n }\r\n\r\n //Если выбрали из RouteLastObjectsRefName, то заменяем на обычного пользователя.\r\n if (itemToReplace.groupcode === RouteLastObjectsRefName) {\r\n inp.ReplaceSelectedItem(itemToReplace.groupcode + ':' + itemToReplace.id, [[UsersRefName + ':' + selItem.id, selItem.name, selItem.name]]);\r\n }\r\n\r\n break;\r\n case UserGroupsRefName:\r\n ExpandUsersGroup(inp, selItem, UserGroupsRefName, UsersRefName, itemToReplace);\r\n break;\r\n case StandardRoutesRefName:\r\n UnbindBeforeUnload();\r\n inp.SetDisabled();\r\n $('#CardContrrolObservers').SetDisabled();\r\n SetStandardRoute(GetParamInURL('id'), selItem.id, null, function (msg) {\r\n // покажем сообщение об ошибке\r\n WA.CR.inlineHint.showError(msg, null, INLINE_HINT_PRIORITY.PRIMARY); \r\n // и почистим ReferenceSelect.\r\n inp.Clear();\r\n inp.SetEnabled();\r\n $('#CardContrrolObservers').SetEnabled();\r\n });\r\n break;\r\n };\r\n}\r\n\r\nfunction ExpandUsersGroup(inp, item, UserGroupsRefName, UsersRefName, itemToReplace) {\r\n if (item.groupcode == UserGroupsRefName) {\r\n ShowTopSpinner(L(\"GROUP_EXPANDS\"), false, true);\r\n\r\n var replaceGroup = function (NeedProcessSubGroups) {\r\n // Получим всех пользователей в группе.\r\n CallService(\"/UserList.asmx/GetUsersInGroup\", { GroupID: item.id, NeedProcessSubGroups: NeedProcessSubGroups, RenderItems: false }, function (res) {\r\n if (res.Success) {\r\n var newValues = [];\r\n //Текущее кол-во элементов поля\r\n var CurrentUsersCount = GetRouteSelectedItemsCount() - 1; // -1 без вставленной группы\r\n\r\n if (MAX_ROUTE_PARTICIPANT_COUNT == null || (CurrentUsersCount + res.Result.length) <= MAX_ROUTE_PARTICIPANT_COUNT) {\r\n if (!IsModalShown()) {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n }\r\n\r\n $.each(res.Result, function () {\r\n newValues.push([UsersRefName + ':' + this.id, ('' + this.text).escapeHtml(), this.text]);\r\n });\r\n\r\n //Переинициализируем компоненту.\r\n inp.ReplaceSelectedItem(itemToReplace.groupcode + ':' + itemToReplace.id, newValues);\r\n\r\n if (newValues.length > 0) {\r\n HideTopSpinner(L(\"GROUP_EXPANDED\"), 3000, null, true);\r\n } else {\r\n HideTopSpinner(L(\"EMPTY_GROUP_WASNT_EXPANDED\"), 3000, null, true);\r\n }\r\n } else {\r\n inp.ReplaceSelectedItem(itemToReplace.groupcode + ':' + itemToReplace.id, []);\r\n ShowWarningForTaskRouteException(L(\"TO_MANY_ITEMS\"));\r\n }\r\n } else {\r\n inp.ReplaceSelectedItem(itemToReplace.groupcode + ':' + itemToReplace.id, []);\r\n ShowWarningForTaskRouteException(res.Error);\r\n };\r\n });\r\n };\r\n\r\n CallService(\"/UserList.asmx/HasGroupUsersAndSubGroups\", { GroupID: item.id }, function (res) {\r\n if (res.Success) {\r\n // Если ли в группе и пользователи, и группы одновременно?\r\n if (res.Result) {\r\n var isButtonClicked = false;\r\n // Выдаем предложение что будем добавлять - пользователй группы или пользователей всех её подгрупп.\r\n var yesBtn = function () {\r\n isButtonClicked = true;\r\n replaceGroup(true);\r\n };\r\n var sett = {\r\n text: format(L('DO_YOU_ALSO_WANT_TO_ADD_USERS_FROM_SUBGROUPS_OF_GROUP'), { 'groupName': item.name }),\r\n close: function () {\r\n if (!isButtonClicked) {\r\n replaceGroup(false);\r\n }\r\n HideTopSpinner('', 3000, null, true);\r\n key.setScope('modalwindow');\r\n }\r\n };\r\n setTimeout(function () {\r\n // Отключаем горячие главищи вообще, что бы Enter на кнопке ОК в окне ошибки сработал нормально. Для этого же и setTimeout\r\n key.setScope('');\r\n ConfirmDialogNew(sett, yesBtn, function () { });\r\n }, 100);\r\n } else {\r\n // Добавляем всех пользователей всех подгрупп.\r\n replaceGroup(true);\r\n };\r\n };\r\n });\r\n }\r\n}\r\n\r\nfunction InitTaskRouteModalWindowsOpts(inp, UsersRefName, UserGroupsRefName, StandardRoutesRefName, customPlaceHolder, RouteLastObjectsRefName) {\r\n return {\r\n excludeGroups: [StandardRoutesRefName, RouteLastObjectsRefName],\r\n treeMode: true,\r\n customPlaceholder: customPlaceHolder,\r\n events: {\r\n 'OnAfterOpen': function () {\r\n var inpId = inp.attr('id');\r\n if (inpId == 'CardContrrolRoute') {\r\n BindHelpIcoClickOnModalWindow('RouteSetup');\r\n } else {\r\n BindHelpIcoClickOnModalWindow('ObserversSetup');\r\n };\r\n },\r\n 'OnSelectedItem': function (eventName, item) {\r\n TaskRouteChanged(inp, [item], UsersRefName, UserGroupsRefName, StandardRoutesRefName, RouteLastObjectsRefName, true);\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction ShowRouteModalWindowAfterLoad() {\r\n $(function () {\r\n setTimeout(function () {\r\n $(\"#CardContrrolRoute\").ShowMultiSelectModalWindow();\r\n }, 100);\r\n });\r\n};\r\n\r\n// Навешиват кнопку удаления последних объектов.\r\nfunction BindRemoveLastObjectBtn(RouteLastObjectsRefName, jControl) {\r\n var touchDev = $.ipad || WA.ENV.isAndroid();\r\n\r\n jControl.on('OnRowsCreated', function (ev, refCode, rows) {\r\n if (refCode && refCode.toLowerCase() === RouteLastObjectsRefName.toLowerCase()) {\r\n $.each(rows, function () {\r\n var row = $(this);\r\n if (!row.hasClass('removeLastObjBtnInit')) {\r\n var rowIco = row.find('.rs_ico');\r\n // Пропускаем Избранных, их нельзя удалять.\r\n if (!rowIco.hasClass('FavoriteUser_16.png') && !rowIco.hasClass('FavoriteUserGroup_16.png')) {\r\n var delBtn = $('

    ' +\r\n '' +\r\n '

    ');\r\n delBtn.on('click', function (ev) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n\r\n //Получаем набор данных; берем ИД [0]; для этого справочника ИД сложный, поэтому берем настоящий ИД [1]. Сложнный ИД в формате \"КОДСПР_ИД\"\r\n var id = row.attr('DataRow').split('|')[0].split('_')[1];\r\n WA.SRV.session.removeLastUsedObject(id);\r\n // Удаляем сразу, что бы не ждать завершения запроса и пользователь сразу увидел результат своего действия.\r\n row.remove();\r\n\r\n return false;\r\n });\r\n row.find('.rs_td').prepend(delBtn);\r\n\r\n // Показываем кнопку удаления при наведении только для обычных PC.\r\n if (!touchDev) {\r\n row.on('mouseenter.removeLastObj', function () {\r\n $(this).find('.deleteLastObj').removeClass('vishidden');\r\n }).on('mouseleave.removeLastObj', function () {\r\n $(this).find('.deleteLastObj').addClass('vishidden');\r\n });\r\n };\r\n };\r\n\r\n row.addClass('removeLastObjBtnInit');\r\n };\r\n });\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n(function (global) {\r\n\r\n const getSuitableCertificates = function () {\r\n return WA.SRV.request('/Certificates.asmx/GetSuitableCertificate', {},{\r\n hideSpinner: true,\r\n hideError:true});\r\n };\r\n\r\n // Отправляет запрос к агенту для подписания.\r\n let signingCustomWorkIds = [];\r\n const _sendSignDataToAgent = (type, id, pluginName, pluginVersion, certId, afterSignCallback, tokenPinCode) => {\r\n if (type === 'T') {\r\n WebAccess.agent.edms.signTask(\r\n id,\r\n certId,\r\n pluginName,\r\n null,\r\n null,\r\n null,\r\n null,\r\n afterSignCallback,\r\n pluginVersion,\r\n tokenPinCode);\r\n }\r\n if (type === 'J') {\r\n WebAccess.agent.edms.signJob(\r\n id,\r\n certId,\r\n pluginName,\r\n null,\r\n null,\r\n null,\r\n null,\r\n afterSignCallback,\r\n pluginVersion,\r\n tokenPinCode);\r\n }\r\n };\r\n\r\n const getErrorWithCustomWorkName = function (error, name, type, id) {\r\n if (!error) {\r\n //Сюда может зайти например если вынули токен при подписании и нажали Отмена в окне с токеном\r\n error = L('CERTIFICATE_FOR_SIGNING_OBJECT_IS_NOT_SPECIFIED_OR_SPECIFIED_INCORRECTLY');\r\n }\r\n if (name) {\r\n let information = L((type === 'T' ? 'TASK' : 'JOB'));\r\n let objectType = L((type === 'T' ? OBJECT_TYPE.TASK : OBJECT_TYPE.JOB));\r\n let objectLink = (new WA.Link(id, objectType)).toURL().asString();\r\n\r\n return `
  • ${information} \"${name}\": ${error}
  • `;\r\n } else {\r\n return `
  • ${error}
  • `;\r\n }\r\n };\r\n\r\n /**\r\n * Подписание ЗЗУ.\r\n *\r\n * @function SignCustomWork\r\n * @param {OBJECT_TYPE} type Тип.\r\n * @param {number} id ИД ЗЗУ.\r\n * @param {string} name Наименование.\r\n * @param {boolean} [opt_silent = false] True - подписание без уведомлений.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n const SignCustomWork = function (type, id, name, opt_silent) {\r\n var result = $.Deferred();\r\n\r\n if (name) {\r\n name = ('' + name).escapeHtml();\r\n }\r\n\r\n Core.agent.getPlugin('edmsplugin').done(plugin => {\r\n getSuitableCertificates().done((res, resp) => {\r\n const certificate = res;\r\n const certArr = certificate.split('###');\r\n models.User._current.DefaultCertificate = {\r\n PluginName: certArr[0],\r\n CertificateID: certArr[1],\r\n PluginVersion: certArr[2],\r\n IsValid: !resp.Warning,\r\n };\r\n\r\n const cert = models.User._current.DefaultCertificate;\r\n if (!cert.IsValid) {\r\n if (!opt_silent) {\r\n ShowError((resp.Warning || '').fromISBuilderToNormal());\r\n }\r\n result.reject(\r\n getErrorWithCustomWorkName((resp.Warning || '').fromISBuilderToNormal(),\r\n name,\r\n type,\r\n id));\r\n return;\r\n }\r\n\r\n // Подписание ЗЗУ.\r\n const onSignCallback = function (res) {\r\n if (res.success) {\r\n const successMessageCode = (type === 'T' ? 'TASK_SIGN_SUCCESS' : 'JOB_SIGN_SUCCESS');\r\n if (!opt_silent) {\r\n ShowTopSpinnerResult(L(successMessageCode), 3000);\r\n }\r\n result.resolve();\r\n } else {\r\n if (!!res.message && (res.result === 'ERR_PIN_REQUIRED')) {\r\n const jTokenPinCode = $(\"#task_token_pin_code\");\r\n // Так мы определим, что у нас происходит массовое совместное подписание документов и ЗЗУ\r\n const jDocsTokenPinCode = $(\"#modal_window\").find(\".token_pin_code\");\r\n\r\n if (signingCustomWorkIds.indexOf(id) === -1) {\r\n signingCustomWorkIds.push(id);\r\n }\r\n\r\n if (jTokenPinCode.length === 0) {\r\n // Проверка массового совместном подписании документов и ЗЗУ\r\n if (jDocsTokenPinCode.length !== 0)\r\n {\r\n if (jDocsTokenPinCode.val() !== '') {\r\n \r\n for (const customworkElement of signingCustomWorkIds) {\r\n _sendSignDataToAgent(\r\n type,\r\n customworkElement,\r\n cert.PluginName,\r\n cert.PluginVersion,\r\n cert.CertificateID,\r\n onSignCallback,\r\n jDocsTokenPinCode.val());\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n const formBuilder = new WA.CMP.forms.FormBuilder('taskjobpincode');\r\n const tokenPinCodeId = 'TASK_TOKEN_PIN_CODE';\r\n formBuilder.addInput(tokenPinCodeId, null, null, 'password');\r\n\r\n const dialog = new WA.CMP.dialogs.BaseDialog();\r\n dialog.title = L(\"PIN_CODE_ASK\");\r\n dialog.setHtml(formBuilder.render());\r\n\r\n dialog.isShowCancelButton = true;\r\n dialog.ok = function() {\r\n const pinCodeValue = formBuilder.getValue(tokenPinCodeId);\r\n dialog.close();\r\n for (const customworkElement of signingCustomWorkIds) {\r\n _sendSignDataToAgent(\r\n type,\r\n customworkElement,\r\n cert.PluginName,\r\n cert.PluginVersion,\r\n cert.CertificateID,\r\n onSignCallback,\r\n pinCodeValue);\r\n }\r\n };\r\n dialog.show();\r\n }\r\n return;\r\n }\r\n\r\n if (!!res && !opt_silent) {\r\n if (res.message) {\r\n ShowError(res.message);\r\n } else {\r\n //Сюда может зайти например если вынули токен при подписании и нажали Отмена в окне с токеном\r\n ShowError(L('CERTIFICATE_FOR_SIGNING_OBJECT_IS_NOT_SPECIFIED_OR_SPECIFIED_INCORRECTLY'));\r\n }\r\n }\r\n result.reject(getErrorWithCustomWorkName(res.message.fromISBuilderToNormal(), name, type, id));\r\n //Почистить запись в профиле\r\n WA.cache.serverCache.setItem('CertificateIDForCustomworkSign', '');\r\n }\r\n };\r\n _sendSignDataToAgent(\r\n type,\r\n id,\r\n cert.PluginName,\r\n cert.PluginVersion,\r\n cert.CertificateID,\r\n onSignCallback,\r\n null);\r\n }).fail(errMsg => {\r\n //показать диалог если не удалось получить подходящий сертификат\r\n SignEDoc(id, null, true, type);\r\n });\r\n }).fail(() => {\r\n const err = L(\"ERR_SIGNING_UNSUPPORTED\");\r\n if (!opt_silent) {\r\n ShowError(err);\r\n }\r\n //Почистить запись в профиле\r\n WA.cache.serverCache.setItem('CertificateIDForCustomworkSign', '');\r\n result.reject(getErrorWithCustomWorkName(err.fromISBuilderToNormal(), name, type, id));\r\n });\r\n return result;\r\n };\r\n\r\n global.SignTask = function (id, name, opt_silent) {\r\n return SignCustomWork('T', id, name, opt_silent);\r\n };\r\n global.SignJob = function (id, name, opt_silent) {\r\n return SignCustomWork('J', id, name, opt_silent);\r\n };\r\n\r\n\r\n var GetEncryptedCustomWorkTree = function (type, id, encodingType, pluginName) {\r\n Core.agent.getPlugin('edmsplugin').done(function (plugin) {\r\n //Получает ключ для расшифровки текста делового процесса\r\n var GetDecryptedKey = function (additionalParams) {\r\n ShowTopSpinner(L(\"PLEASE_WAIT\"), true);\r\n\r\n //Запрашиваем токен на расшифровку текста делового процесса\r\n RequestToken(TOKEN_OPERATION.GET_ENCRYPTION_KEY, function (token) {\r\n var requestName = (type == 'T' ? \"GetTaskDecryptedKey\" : \"GetJobDecryptedKey\");\r\n\r\n //Заполняем параметры запроса\r\n var params = { \"EncodeType\": encodingType, \"EncryptionPluginName\": pluginName, \"Token\": token };\r\n if (!!additionalParams) $.extend(params, additionalParams);\r\n if (type == 'T') {\r\n params[\"TaskID\"] = id;\r\n } else {\r\n params[\"JobID\"] = id;\r\n }\r\n\r\n WebAccess.agent.transmitRequest(requestName, \"edmsplugin\", params).done(function (response) {\r\n //Получаем текст делового процесса\r\n if (type == 'T') {\r\n CallService(\"Task.asmx/GetWorkTreeHtml\", { TaskID: id, EncryptionKey: response.result }, function (response) {\r\n if (response.Success) {\r\n if ($('.ListRequisiteList[kind=att]').length > 0) {\r\n $('span.MainText').append(response.Result);\r\n $('.TaskTree').removeClass('TaskTree__hidden');\r\n $('#Attachments_AttachmentsList_list').removeClass('content-list__area_hidden');\r\n } else {\r\n window.location.reload();\r\n }\r\n } else {\r\n $('span.MainText').append(response.Error);\r\n }\r\n });\r\n } else {\r\n CallService(\"Job.asmx/GetWorkTreeHtml\", { JobID: id, EncryptionKey: response.result }, function (response) {\r\n if (response.Success) {\r\n if ($('.ListRequisiteList[kind=att]').length > 0) {\r\n $('span.MainText').append(response.Result);\r\n $('.TaskTree').removeClass('TaskTree__hidden');\r\n $('#Attachments_AttachmentsList_list').removeClass('content-list__area_hidden');\r\n } else {\r\n window.location.reload();\r\n }\r\n } else {\r\n $('span.MainText').append(response.Error);\r\n }\r\n });\r\n }\r\n }).fail(function (response) {\r\n try {\r\n //FIXME: нужен ли декодинг?\r\n //resultMessage = decodeURIComponent(response.message);\r\n resultMessage = response.message;\r\n } catch (e) {\r\n resultMessage = L('CUSTOMWORK_DECODING_FAIL');\r\n }\r\n ShowError(resultMessage, function () {\r\n if (encodingType % 2 === 1) {\r\n CloseWindow();\r\n } else {\r\n GetEncryptedCustomWorkTree(type, id, encodingType, pluginName);\r\n }\r\n },\r\n 400,\r\n function () {\r\n CloseWindow();\r\n });\r\n }).always(function (response) {\r\n HideTopSpinner(\"\", 1);\r\n });\r\n }, id);\r\n };\r\n\r\n //Если в шифровании используется пароль, то запросим его у пользователя.\r\n if (encodingType >= 2) {\r\n return RequestPasswordForDecryption(null,\r\n function (pass) { GetDecryptedKey({ Password: pass }); },\r\n function () {\r\n if (!!!$(\"#docPassword\").data('entered')) {\r\n CloseWindow();\r\n }\r\n }).cancel = function () {\r\n CloseWindow();\r\n };\r\n } else {\r\n GetDecryptedKey(null);\r\n }\r\n });\r\n };\r\n\r\n global.GetEncryptedTaskTree = function (id, encoding, pluginName) {\r\n return GetEncryptedCustomWorkTree('T', id, !!encoding ? encoding : WebAccess.current.Encoding, !!pluginName ? pluginName : WebAccess.current.PluginName);\r\n };\r\n\r\n global.GetEncryptedJobTree = function (id, encoding, pluginName) {\r\n return GetEncryptedCustomWorkTree('J', id, !!encoding ? encoding : WebAccess.current.Encoding, !!pluginName ? pluginName : WebAccess.current.PluginName);\r\n };\r\n\r\n})(window);\r\n\r\nfunction ShowEncodedObjectError(error) {\r\n var mbox = new WA.CMP.dialogs.MessageBox();\r\n mbox.width = 470;\r\n mbox.showError(error, null, null, function () { WA.CR.window.close(); });\r\n}\r\n\r\nvar clamp = function (val, min, max) {\r\n return Math.min(Math.max(val, min), max);\r\n};\r\n\r\n// Инициализирует возможность изменять размер панели вложений.\r\nfunction InitAttachmentsResize() {\r\n var minX = 850;\r\n var defaultAttachWidth = 260;\r\n\r\n function setWidth(w) {\r\n w = parseInt(w, 10);\r\n var jMainContainer = $('#main_container');\r\n var attd = jMainContainer.find('.attachments_td');\r\n attd.width(w);\r\n\r\n var jCard = jMainContainer.find(\".card:first\");\r\n jCard.css({ \"marginRight\": w });\r\n var jLeftColumn = $('#left_column');\r\n if (jLeftColumn.hasClass('horizontal')) {\r\n jLeftColumn.css({ \"marginRight\": w});\r\n }\r\n\r\n var lr = ListRequisite(attd.find('.ListRequisite').attr('id'));\r\n if (lr.onUpdate) lr.onUpdate();\r\n\r\n // установка размеров реактивной карточки\r\n const jCardTabContainer = $('.card-tab-container');\r\n jCardTabContainer.find('.card-tab-container__main').css({ 'maxWidth': `calc(100% - ${w}px)` });\r\n jCardTabContainer.find('.card-tab-container__aside').css({ 'minWidth': w });\r\n $(window).trigger('resize');\r\n }\r\n\r\n var res = $.cookie('attwidth');\r\n if (!!res) {\r\n setWidth(res);\r\n } else {\r\n setWidth(defaultAttachWidth);\r\n }\r\n\r\n $('#attachments_dragarea').mousedown(function (ev) {\r\n ev.preventDefault();\r\n var $this = $(this);\r\n var maxX = $(window).width() - defaultAttachWidth;\r\n $this.addClass('dragging').offset({ left: clamp(ev.pageX, minX, maxX) });\r\n $('html').css('cursor', 'col-resize')\r\n .bind('mousemove.attresize', function (ev) {\r\n ev.preventDefault();\r\n $this.offset({ left: clamp(ev.pageX, minX, maxX) });\r\n })\r\n .bind('mouseup.attresize', function (ev) {\r\n ev.preventDefault();\r\n $('html').css('cursor', '').unbind('mousemove.attresize').unbind('mouseup.attresize');\r\n $this.removeClass('dragging').css('left', '');\r\n var w = $(window).width() - clamp(ev.pageX, minX, maxX) + 10;\r\n setWidth(w);\r\n document.cookie = \"attwidth=\" + w;\r\n });\r\n });\r\n}\r\n\r\nfunction InitSavedTextResize() {\r\n if (![OBJECT_TYPE.TASK, OBJECT_TYPE.JOB].includes(WA.CR.Type)) {\r\n return;\r\n }\r\n // проверяем, есть ли вообще видимая область переписки\r\n if (!$('.bottom_textarea:visible').innerHeight()) {\r\n return;\r\n }\r\n\r\n let jConversation = $('.task-corresponds');\r\n if (!jConversation.length) {\r\n jConversation = $('.conversation-container__main');\r\n }\r\n let jSavedText = jConversation.find('.card_task_savedtext_container');\r\n if (!jSavedText.length) {\r\n jSavedText = jConversation.find('#ctl00');\r\n }\r\n if (jSavedText.length) {\r\n // Размеры элементов\r\n const dragAreaHeight = 12;\r\n const minTextAreaHeight = 140;\r\n\r\n const taskCorrespondsHeight = jConversation.height();\r\n const jTextArea = jConversation.find('.bottom_textarea');\r\n jSavedText.css({ height: taskCorrespondsHeight - jTextArea.height() - dragAreaHeight });\r\n\r\n if (!$.ipad) {\r\n jSavedText.resizable({\r\n handles: {\r\n s: jSavedText.next()\r\n },\r\n helper: 'ui-resizable-helper',\r\n stop: (event, element) => {\r\n let textAreaHeight = Math.max(taskCorrespondsHeight - element.size.height, minTextAreaHeight);\r\n jTextArea.css({ minHeight: textAreaHeight });\r\n jSavedText.css({ width: 'auto', height: taskCorrespondsHeight - textAreaHeight - dragAreaHeight });\r\n },\r\n });\r\n }\r\n }\r\n}\r\n\r\n// Отображение в раскрытом виде только тех подзадач, которые относятся к текущему заданию.\r\nfunction ShowOnlyCurrentRelatedTasks() {\r\n var jTreeElements = $('.TaskTree').find('[id*=\"Item_\"]');\r\n // Скрытие (схлопывание) подзадач, не содержащих текущее задание.\r\n jTreeElements.each(function() {\r\n if (!$(this).find('.ParentForCurrentItemHeader, .CurrentItemHeader').length) {\r\n var jArrow = $(this).find('.ItemExpandCollapse').get(0);\r\n ChangeItemExpandCollapse(jArrow);\r\n }\r\n });\r\n // Раскрытие всех потомков текущих элементов.\r\n var jChildrenOfCurrentElement = $('.CurrentItemHeader').eq(0).parents('div:first').children('div');\r\n var jExpandCollapseArrow = jChildrenOfCurrentElement.find('.ItemExpandCollapse');\r\n jExpandCollapseArrow.each(function() {\r\n if ($(this).hasClass('att_plus.png')) {\r\n ChangeItemExpandCollapse($(this));\r\n }\r\n });\r\n // Раскрытие всех заданий-потомков родителя текущего элемента.\r\n var jChildrenOfParentForCurrentElement = $('.ParentForCurrentItemHeader').eq(0).parents('div:first').children('div');\r\n jChildrenOfParentForCurrentElement.each(function() {\r\n if ($(this).hasClass('Item_Job')) {\r\n var jExpandCollapseArrow = $(this).find('.ItemExpandCollapse');\r\n jExpandCollapseArrow.each(function() {\r\n if ($(this).hasClass('att_plus.png')) {\r\n ChangeItemExpandCollapse($(this));\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n// Прокрутка до активного задания.\r\nfunction ScrollTreeToCurrentJob() {\r\n const jRightColumn = $('#right_column');\r\n\r\n // Найдем контейнер переписки\r\n let jSavedText = jRightColumn.find('.card_task_savedtext_container');\r\n\r\n // ToDo: в заданиях кривая разметка, поэтому будем искать другой элемент.\r\n if (!jSavedText.length) {\r\n jSavedText = $('#ctl00');\r\n }\r\n\r\n if (jSavedText.length) {\r\n jSavedText.scrollTop(0);\r\n\r\n // Найдем текущую ЗЗУ\r\n const jCurrentCustomWork = jSavedText.find('.CurrentItemHeader,.CurrentItemMark:last').closest('table');\r\n\r\n if (jCurrentCustomWork.length) {\r\n\r\n // Получим расстояние до контейнера переписки\r\n const savedTextTop = jSavedText.offset().top;\r\n\r\n // Получим расстояние до текущей ЗЗУ\r\n const currentCustomWorkTop = jCurrentCustomWork.offset().top;\r\n\r\n // Проскролим до текущей ЗЗУ\r\n jSavedText.scrollTop(currentCustomWorkTop - savedTextTop);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Диалог установки прав на вложения.\r\n * @function ShowTaskAttachmentsAssignRightDlg\r\n * @param {string} taskID ид объекта\r\n * @param {string} userRights права на вложения\r\n * @param {string} message сообщение\r\n * @param {string} isTask признак является ли задачей\r\n * @param {string} postbackAction действие postback\r\n * @param {string} resVar результат выполнения задания\r\n */\r\nfunction ShowTaskAttachmentsAssignRightDlg(taskID, userRights, message, isTask, postbackAction, resVar) {\r\n //var title = 'What attachments rights assign to task participants?'\r\n //var msg = 'Some of the task participants do not have minimal necessary attachments rights (to view). Press View, Modify or Full to assign corresponding rights, Ignore if you don\\'t want to change any rights and Cancel to abort task start.'\r\n function ProceedTaskStarting(attachmentsRights) {\r\n UnbindBeforeUnload();\r\n if (isTask) {\r\n CallService(\"/Task.asmx/SetAttachmentsRights\", { TaskID: taskID, Rights: attachmentsRights }, function (res) {\r\n if (res.Success) {\r\n DoAction('__POSTBACK_ACTION=StartTask&IgnoreAttachmentsRights=true', true);\r\n } else {\r\n ShowTaskAttachmentsAssignRightDlg(taskID, res.Result, res.Error, isTask);\r\n };\r\n });\r\n } else {\r\n CallService(\"/Job.asmx/SetAttachmentsRights\", { JobID: taskID, Rights: attachmentsRights }, function (res) {\r\n if (res.Success) {\r\n DoActionForJob(postbackAction, resVar);\r\n } else {\r\n ShowTaskAttachmentsAssignRightDlg(taskID, res.Result, res.Error, isTask);\r\n };\r\n });\r\n }\r\n }\r\n\r\n if (userRights == \"Empty\") {\r\n if (isTask) {\r\n DoAction('__POSTBACK_ACTION=StartTask&IgnoreAttachmentsRights=true', true);\r\n } else {\r\n DoActionForJob(postbackAction, resVar);\r\n }\r\n return;\r\n }\r\n\r\n var mbox = new WA.CMP.dialogs.MessageBox();\r\n if (userRights == \"Full\") {\r\n mbox\r\n .addButton('view_right_btn', L('VIEWING'), function () { ProceedTaskStarting(ACCESS_RIGHTS.VIEW); })\r\n .addButton('modify_right_btn', L('MODIFY'), function () { ProceedTaskStarting(ACCESS_RIGHTS.CHANGE); })\r\n .addButton('full_right_btn', L('FULL'), function () { ProceedTaskStarting(ACCESS_RIGHTS.FULL); })\r\n .addButton('max_right_btn', L('MAXIMALLY_POSSIBLE_RIGHTS'), function () {\r\n if (isTask) {\r\n WA.services.call(\"/Task.asmx/SetMaximallyPossibleRightsOnAttachments\", { TaskID: taskID }).success(function () {\r\n DoAction('__POSTBACK_ACTION=StartTask&IgnoreAttachmentsRights=true', true);\r\n });\r\n } else {\r\n WA.services.call(\"/Job.asmx/SetMaximallyPossibleRightsOnAttachments\", { JobID: taskID }).success(function () {\r\n DoActionForJob(postbackAction, resVar);\r\n });\r\n }\r\n })\r\n .addButton('ignore_button', L('IGNORE'), function () { ProceedTaskStarting(ACCESS_RIGHTS.EMPTY); })\r\n ._setDefaultButton('view_right_btn');\r\n }\r\n if (userRights == \"View\") {\r\n mbox\r\n .addButton('view_right_btn', L('VIEWING'), function () { ProceedTaskStarting(ACCESS_RIGHTS.VIEW); })\r\n .addButton('ignore_button', L('IGNORE'), function () { ProceedTaskStarting(ACCESS_RIGHTS.EMPTY); })\r\n ._setDefaultButton('view_right_btn');\r\n }\r\n if (userRights == \"Change\") {\r\n mbox\r\n .addButton('view_right_btn', L('VIEWING'), function () { ProceedTaskStarting(ACCESS_RIGHTS.VIEW); })\r\n .addButton('modify_right_btn', L('MODIFY'), function () { ProceedTaskStarting(ACCESS_RIGHTS.CHANGE); })\r\n .addButton('max_right_btn', L('MAXIMALLY_POSSIBLE_RIGHTS'), function () {\r\n if (isTask) {\r\n WA.services.call(\"/Task.asmx/SetMaximallyPossibleRightsOnAttachments\", { TaskID: taskID }).success(function () {\r\n DoAction('__POSTBACK_ACTION=StartTask&IgnoreAttachmentsRights=true', true);\r\n });\r\n } else {\r\n WA.services.call(\"/Job.asmx/SetMaximallyPossibleRightsOnAttachments\", { JobID: taskID }).success(function () {\r\n DoActionForJob(postbackAction, resVar);\r\n });\r\n }\r\n })\r\n .addButton('ignore_button', L('IGNORE'), function () { ProceedTaskStarting(ACCESS_RIGHTS.EMPTY); })\r\n ._setDefaultButton('view_right_btn');\r\n }\r\n\r\n if (userRights == \"NoAccess\") {\r\n mbox\r\n .addButton('ignore_button', L('IGNORE'), function () { ProceedTaskStarting(ACCESS_RIGHTS.EMPTY); })\r\n ._setDefaultButton('ignore_button');\r\n }\r\n\r\n mbox.isShowCancelButton = true;\r\n mbox.isShowOkButton = false;\r\n var msg = L('WARN_ASSIGN_TASK_ATTACHMENTS_RIGHTS_DLG_MSG');\r\n\r\n if (typeof message != 'undefined') {\r\n msg = L('WRN_CANNOT_SET_ATTACHMENTS_RIGHTS') + '
    ' + message;\r\n }\r\n\r\n mbox.showQuestion(L('WARN_ASSIGN_TASK_ATTACHMENTS_RIGHTS_DLG_CAPTION'), msg, L('ACCESS_RIGHTS'));\r\n}\r\n\r\n/**\r\n * Выполнить действие для заданий.\r\n * @function DoActionForJob\r\n * @param {string} postbackAction действие postback\r\n * @param {string} resVar результат выполнения задания\r\n */\r\nfunction DoActionForJob(postbackAction, resVar) {\r\n if (postbackAction) {\r\n //В случае если по ТМ\r\n if (resVar > -1) {\r\n DoAction(format('__POSTBACK_ACTION={0}&IgnoreAttachmentsRights=true&__RESULT_VAR={1}', postbackAction, resVar), true);\r\n } else {\r\n DoAction(format('__POSTBACK_ACTION={0}&IgnoreAttachmentsRights=true', postbackAction), true);\r\n }\r\n } else {\r\n //если по свободному маршруту\r\n DoAction('op=doit&IgnoreAttachmentsRights=true', true);\r\n }\r\n}\r\n\r\n(function (global) {\r\n var encryptTaskWithCert = function (id) {\r\n var encryption = 1;\r\n\r\n var encryptCheckBox = $('#EncryptWithCertCheck');\r\n var rightType = $('input[id*=RightsType][type=text]');\r\n setTimeout(function () {\r\n if (encryption == 1) {\r\n encryptCheckBox.attr('checked', 'chedked').change();\r\n //rightType.data('DropDownListInstance').addDropDownListItem(['M', L('MANUAL'), L('MANUAL'), false]).setValue('M').disable();\r\n } else {\r\n encryptCheckBox.removeAttr('checked').change();\r\n //rightType.data('DropDownListInstance').removeDropDownListItem('M').setPrevValue().enable();\r\n }\r\n }, 100);\r\n $('#TaskEncryptionType').val(encryption);\r\n };\r\n\r\n var setEncryption = function (id, encryption, password, onSuccess, onFail) {\r\n WA.SRV.call('/Task.asmx/SetEncryption', { TaskID: id, Encryption: encryption, Password: password })\r\n .success(function (res) {\r\n HideTopSpinner('task enctypted!');\r\n if (!!onSuccess) onSuccess();\r\n })\r\n .fail(function (error) {\r\n if (!!onFail) onFail(error);\r\n });\r\n };\r\n\r\n global.EncryptTaskWithCert = function (id) {\r\n return encryptTaskWithCert(id);\r\n };\r\n})(window);\r\n\r\nfunction EncryptWithCertCheckbox(el) {\r\n var encryption = $(el).is(':checked') ? 1 : 0;\r\n var rightType = $('input[id*=RightsType][type=text]');\r\n var dropDownList = rightType.data('DropDownListInstance');\r\n if (encryption == 1) { \r\n dropDownList.addDropDownListItem(['M', L('MANUAL'), L('MANUAL'), false]).setValue('M').disable();\r\n if (dropDownList.prevValue != 'M') $.cookie('lastAccessType', dropDownList.prevValue);\r\n } else {\r\n dropDownList.removeDropDownListItem('M');\r\n if (!!$.cookie('lastAccessType')) dropDownList.setValue($.cookie('lastAccessType')).enable();\r\n else dropDownList.setPrevValue().enable();\r\n }\r\n $('#TaskEncryptionType').val(encryption);\r\n}\r\n\r\n$(function () {\r\n WA.ready(function () {\r\n if (WA.getLocation() == 'task') {\r\n var rightType = $('input[id*=RightsType][type=text]');\r\n const dropDownList = rightType.data('DropDownListInstance');\r\n if ($('#TaskEncryptionType').val() == '1') {\r\n if ((rightType.length) && (!!dropDownList)) {\r\n dropDownList.addDropDownListItem(['M', L('MANUAL'), L('MANUAL'), false]).setValue('M').disable();\r\n }\r\n $('#EncryptWithCertCheck').attr('checked', true);\r\n } else {\r\n if (rightType.length && (WA.Task.ID == WA.Task.MainTaskID) && (!!dropDownList)) {\r\n dropDownList.removeDropDownListItem('M').setPrevValue().enable();\r\n }\r\n $('#EncryptWithCertCheck').removeAttr('checked');\r\n }\r\n }\r\n });\r\n});\r\n\r\n/**\r\n * Добавляет ссылку на объект во вложения.\r\n * @param {Link} link Ссылка на объект.\r\n * @since 5.1.0.1522\r\n */\r\nfunction AddAttachment(link) {\r\n if (!!link) {\r\n var att = ListRequisite('Attachments_AttachmentsList');\r\n var linkModel = link.toLinkModel();\r\n // Проверяем если уже такая ссылка.\r\n if (att.CheckObject(linkModel)) {\r\n // Если нет, то добавляем.\r\n att.AddObject(linkModel);\r\n att.UpdateList();\r\n }\r\n }\r\n};\r\n","/// \r\n/// \r\n\r\nfunction ParseLocalCopyModifyDate(modifyDate) {\r\n var timedateSeparatorIndex = modifyDate.indexOf(\" \");\r\n var timePart = modifyDate.substring(timedateSeparatorIndex + 1);\r\n var datePart = modifyDate.substring(0, timedateSeparatorIndex);\r\n\r\n var monthSeparatorIndex = datePart.indexOf(\"/\");\r\n var daySeparatorIndex = datePart.lastIndexOf(\"/\");\r\n var month = datePart.substring(0, monthSeparatorIndex);\r\n var day = datePart.substring(monthSeparatorIndex+1, daySeparatorIndex);\r\n var year = datePart.substring(daySeparatorIndex+1);\r\n\r\n var hoursSeparatorIndex = timePart.indexOf(\":\");\r\n var minsSeparatorIndex = timePart.lastIndexOf(\":\");\r\n var hours = timePart.substring(0, hoursSeparatorIndex);\r\n var mins = timePart.substring(hoursSeparatorIndex + 1, minsSeparatorIndex);\r\n var secs = timePart.substring(minsSeparatorIndex + 1);\r\n\r\n return new Date(year, month-1, day, hours, mins, secs, 0);\r\n}\r\n\r\n//Возвращает размер документа в виде строки.\r\nfunction GetDocumentSizeAsString(sizeB) {\r\n var sizeMB = Math.floor(sizeB / (1024 * 1024));\r\n var sizeKB = Math.floor(sizeB / 1024);\r\n if (sizeMB > 0) {\r\n return sizeMB + \" \" + L(\"SIZE_POSTFIX_MBYTES\");\r\n } else if (sizeKB > 0) {\r\n return sizeKB + \" \" + L(\"SIZE_POSTFIX_KBYTES\");\r\n } else {\r\n return sizeB + \" \" + L(\"SIZE_POSTFIX_BYTES\");\r\n }\r\n}\r\n\r\n//Отображает модальное окно с выбором действий при открытии документа, у которого есть локальная копия.\r\nfunction AskForActionOnDocument(Doc, LocalCopies, Lock) {\r\n var hasOnlyOneCopy = LocalCopies.length == 1;\r\n var actions = [L('RECOVER_FROM_LOCAL_COPY'), L('OPEN_DOC_AND_DELETE_LOCAL_COPY'), L('GO_TO_DOCUMENT_RECOVERY')];\r\n var documentVersion = null;\r\n for (var i = 0; i < Doc.Versions.length; ++i) {\r\n if (Doc.Versions[i].Number == LocalCopies[0].Version);\r\n documentVersion = Doc.Versions[i];\r\n }\r\n\r\n var localCopyModifyDate = ParseLocalCopyModifyDate(LocalCopies[0].EditDate);\r\n var documentModifyDate = parseDateTime(documentVersion.LastModifiedText);\r\n var message = format(hasOnlyOneCopy ? (L(\"DOCUMENT_HAS_LOCAL_COPY\").replaceAll(\"\\\\\\\\n\", \"
    \")) : L(\"DOCUMENT_HAS_MULTIPLE_LOCAL_COPIES\"), {\r\n 0: Doc.ClientName,\r\n 1: formatDateTime(documentModifyDate),\r\n 2: formatDateTime(localCopyModifyDate),\r\n 3: GetDocumentSizeAsString(documentVersion.Size),\r\n 4: GetDocumentSizeAsString(LocalCopies[0].Size)\r\n });\r\n var html = '
    ';\r\n html += '
    ';\r\n html += '
    ' + L('LOCAL_COPY_OPTIONS') + '
    ';\r\n html += '
    ';\r\n for (var i = 0; i < actions.length; i++) {\r\n var needCheck = (i == 0 && hasOnlyOneCopy) || (i == 2 && !hasOnlyOneCopy);\r\n html += '
    '\r\n + ''\r\n + '
    ';\r\n }\r\n html += '
    ';\r\n\r\n LocalCopyRecommendedAction[(LocalCopies[0].ID + 'v' + LocalCopies[0].Version)] = localCopyModifyDate > documentModifyDate ? \"RECOVER\" : \"DELETE\";\r\n\r\n var mbox = new WA.CMP.dialogs.MessageBox();\r\n mbox.width = 600;\r\n mbox.okCancelButtons(function () {\r\n var opcode = $('#actionOptions').find('input:checked').attr('opcode');\r\n switch (opcode) {\r\n case \"0\": ReturnLocalCopy(Doc.ID, LocalCopies[0].Version, Doc.Encoding, Doc.PluginName, GetFileNameFromDoc(Doc, LocalCopies[0].Version), LocalCopies[0].EditDate); break;\r\n case \"1\":\r\n DeleteLocalCopy(Doc.ID, LocalCopies[0].Version, function () {\r\n OpenWithAgent({ id: Doc.ID }, Lock);\r\n });\r\n break;\r\n case \"2\": WebAccess.agent.edms.checkDocumentLocalCopies(); break;\r\n }\r\n }, null);\r\n mbox.showWarning(message, html);\r\n BindHelpIcoClickOnModalWindow('RestoreDocuments', $('#dialog_content_' + mbox.id).parents('.ui-dialog'));\r\n}\r\n\r\nfunction GetFileNameFromDoc(Doc, Version) {\r\n var ext = Doc.Editor.Extension; ;\r\n if (!!Version) {\r\n var verIndex = -1;\r\n for (var i = 0; i < Doc.Versions.length; i++) {\r\n if (Doc.Versions[i].Number == Version) { verIndex = i; break; }\r\n }\r\n ext = Doc.Versions[verIndex].Editor.Extension;\r\n }\r\n return Doc.ClientName + '.' + ext.toLowerCase();\r\n}\r\n\r\nfunction ExportCert(el) {\r\n var jEl = $(el);\r\n var certid = jEl.attr('data-certid');\r\n var docId = WA.current.ID;\r\n var verNum = jEl.attr('data-vernum');\r\n if (certid === \"\") {\r\n ShowError(format(L(\"ERR_INVALID_SIGN\"), verNum, WA.current.ClientName));\r\n } else {\r\n window.location.href = \"DynControl.ashx?c=export_certificate&certid=\" + certid + \"&docid=\" + docId + \"&verNum=\" + verNum;\r\n }\r\n}\r\n","(function (global) {\r\n\r\n // Регистрирует событие на смену значения типа папки для мобильной версии.\r\n function registerDisableShowUnreadControlForMobile(kindsToDisable, noKey) {\r\n $(function () {\r\n $('select[id$=\"Kind\"]').change(function () {\r\n disableShowUnreadControl($(this).val(), kindsToDisable, noKey);\r\n });\r\n });\r\n }\r\n\r\n // Делает неактивным поле \"Показывать число непрочитанных заданий\", если выбрано неположенное значение.\r\n function disableShowUnreadControl(selectedKey, kindsToDisable, noKey) {\r\n var jShowUnreadControl = getShowUnreadControl();\r\n var showUnreadPick = jShowUnreadControl.data('DropDownListInstance');\r\n if ($.inArray(selectedKey, kindsToDisable) === -1) {\r\n if (showUnreadPick) {\r\n // Для обычной версии.\r\n showUnreadPick.disable();\r\n showUnreadPick.setValue(noKey);\r\n } else {\r\n // Для мобильной версии.\r\n getShowUnreadControl().val(noKey).attr('disabled', true).addClass('Req_Disabled');\r\n }\r\n } else {\r\n if (showUnreadPick) {\r\n // Для обычной версии.\r\n showUnreadPick.enable();\r\n } else {\r\n // Для мобильной версии.\r\n getShowUnreadControl().attr('disabled', false).removeClass('Req_Disabled');\r\n }\r\n }\r\n }\r\n\r\n // Получает контрол \"Показывать число непрочитанных заданий\".\r\n function getShowUnreadControl() {\r\n var r = $('.ShowUnreadContainer').find('input.pickField');\r\n if (r.length === 0) {\r\n // Для мобильной версии.\r\n r = $('select[id$=\"ShowUnread\"]');\r\n }\r\n return r;\r\n }\r\n\r\n /**\r\n * Установить доступность кнопок на ленте при изменении формы папки.\r\n * @since 5.5.2201\r\n */\r\n global.bindButtonsEnablingOnFormChange = () => {\r\n const buttonNames = [ 'Save', 'SaveAndClose' ];\r\n const jMainContainerInputs = $('#main_container').find('input, textarea, select');\r\n const initialSerializedValues = jMainContainerInputs.serialize();\r\n switch (WA.CR.sideBar.tabs.current.name) {\r\n case 'Card':\r\n jMainContainerInputs.bind('change keyup', () => {\r\n if (jMainContainerInputs.serialize() !== initialSerializedValues) {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n }\r\n });\r\n break;\r\n case 'RightsList':\r\n $('.Rights').on('rightsChange', () => {\r\n Core.cards.enableButtonsOnFormChange(buttonNames);\r\n });\r\n break;\r\n }\r\n };\r\n\r\n // Exports\r\n global.RegisterDisableShowUnreadControlForMobile = registerDisableShowUnreadControlForMobile;\r\n global.DisableShowUnreadControl = disableShowUnreadControl;\r\n\r\n})(window);\r\n","","(function ($) {\r\n function MultiSelectModalWindow(inp, opt) {\r\n this.init(inp, opt);\r\n }\r\n\r\n MultiSelectModalWindow.prototype = {\r\n //Input на странице, на который навешивается этот плагин.\r\n inp: null,\r\n //Класс компоненты \"Выбор из справочника\"\r\n rsInstance: null,\r\n\r\n // html разметка для добавления в модальное окно\r\n html: null,\r\n // объект со списком записей и выбранными записями\r\n dataObject: null,\r\n // нужна ли колонка с названием группы, к которой принадлежит запись\r\n withGroupColumn: null,\r\n // jquery объект таблицы с выбранными записями\r\n selectedRecordsTable: null,\r\n // jquery объект списка записей\r\n recordsList: null,\r\n // Input фильтра.\r\n filterInput: null,\r\n // Спиннер в строке фильтра.\r\n filterSpinner: null,\r\n // Сообщение под деревом.\r\n groupsListMessageBox: null,\r\n\r\n //REVIEW Комментарий\r\n navigationKeyCodes: [27, 9, 13, 37, 38, 39, 40],\r\n // Предыдущее значение фильтра.\r\n lastFilterValue: \"\",\r\n\r\n\r\n /* Переопределяемые параметры */\r\n defaultRecordIconClass: \"user-tree__icon_default\",\r\n defaultMarkedRecordIconClass: \"user-tree__icon_selected-default\",\r\n // Группы, в которых не будет осуществляться поиск.\r\n excludeGroups: [],\r\n customPlaceholder: null,\r\n // Дерево пользователей.\r\n treeMode: false,\r\n treeUrl: \"/UserList.asmx/GetUsers?isrightslist=false\",\r\n treeModeRecordIconClass: \"user-tree__icon_user\",\r\n treeModeGroupIconClass: \"user-tree__icon_group\",\r\n treeModeMarkedRecordIconClass: \"user-tree__icon_selected-user\",\r\n treeModeMarkedGroupIconClass: \"user-tree__icon_selected-group\",\r\n favoriteUserIconClass: \"user-tree__icon_fav-user\",\r\n favoriteUserGroupIconClass: \"user-tree__icon_fav-group\",\r\n recordsListContextMenu: null,\r\n // нужно ли показывать окно по нажатию на [...]\r\n bindWindowOnInput: true,\r\n\r\n\r\n // Список выполняющихся запросов, что была возможно их досрочно прекратить.\r\n _lastRequests: [],\r\n // Для небольшой задержки при вводе фильтра, что бы не отправлять слишком много запросов.\r\n _filterTimeout: null,\r\n // Отображены не все записи?.\r\n _isNotAllRecordsShown: false,\r\n\r\n\r\n //Список навешенных событий.\r\n events: null,\r\n // Привязка к событиям\r\n bind: function (name, func) {\r\n var me = this;\r\n if (me.events != null) {\r\n me.events[name] = func;\r\n }\r\n },\r\n // Создание событий\r\n fire: function (name) {\r\n var me = this;\r\n if (me.events != null && typeof me.events[name] !== 'undefined') {\r\n var r = me.events[name].apply(me, arguments);\r\n return (typeof r === 'undefined' || r);\r\n }\r\n },\r\n\r\n\r\n // Инициализация объекта.\r\n init: function (inp, opt) {\r\n var me = this;\r\n\r\n me.events = {};\r\n //По-умолчанию нужно показывать окно по нажатию на [...]\r\n me.bindWindowOnInput = true;\r\n //Вначале не нужно показывать сообщение что показы не все записи.\r\n me._isNotAllRecordsShown = false;\r\n\r\n // Переозначиваем параметры.\r\n if (opt) { $.extend(me, opt); };\r\n\r\n // Инициализируем объект с данными.\r\n me.dataObject = {\r\n groups: {},\r\n selectedItems: [],\r\n };\r\n\r\n if (inp) {\r\n me.inp = inp;\r\n me.rsInstance = inp.data('ReferenceSelectInstance');\r\n if (!!me.rsInstance) {\r\n me.bindThis();\r\n }\r\n }\r\n },\r\n\r\n // Навешивает события на открытие модального окна.\r\n bindThis: function () {\r\n var me = this, rs = me.rsInstance;\r\n\r\n // Переопределим функцию замены выбранного элемента на что-то другое.\r\n me.inp.off('ReplaceSelectedItem').on('ReplaceSelectedItem.MultiSelectModalWindow', function (e, oldID, newValues) {\r\n if (me.isModalShown()) {\r\n var convNewValues = [];\r\n for (var i = 0, len = newValues.length; i < len; i++) {\r\n convNewValues.push(me.convertRefSelectItemToThis(newValues[i]));\r\n };\r\n me.replaceSelectedItem(me.convertRefSelectItemIdToThisId(oldID), convNewValues);\r\n } else {\r\n rs.replaceSelectedItem(oldID, newValues);\r\n };\r\n });\r\n\r\n try {\r\n if (me.bindWindowOnInput) {\r\n rs.img.addClass('MultiselectModalWindowIco').off('click touchstart').on('click.MultiSelectModalWindow touchstart.MultiSelectModalWindow', function () {\r\n me.show();\r\n });\r\n }\r\n else {\r\n rs.img.removeClass('MultiselectModalWindowIco');\r\n }\r\n } catch (e) {\r\n // Всякое бывает.\r\n }\r\n },\r\n\r\n // Конвертирует ИД выбранного элемента обычного выбора из справочника в ИД выбранного элемента модального диалога.\r\n convertRefSelectItemIdToThisId: function (itemId) {\r\n var me = this, rs = me.rsInstance;\r\n\r\n var groupcode,\r\n id = itemId,\r\n idParts = id.split(':');\r\n\r\n if (idParts.length == 2) {\r\n groupcode = idParts[0];\r\n id = idParts[1];\r\n } else {\r\n groupcode = rs.getFirstRefCode();\r\n };\r\n\r\n return {\r\n id: id,\r\n groupcode: groupcode\r\n };\r\n },\r\n\r\n // Конвертирует выбранный элемент обычного выбора из справочника в выбранный элемент модального диалога.\r\n convertRefSelectItemToThis: function (item) {\r\n var res = this.convertRefSelectItemIdToThisId(item[0]);\r\n res['name'] = (res.id > 0 ? item[2] : item[1]);\r\n return res;\r\n },\r\n\r\n // Открыто ли модальное окно.\r\n isModalShown: function () {\r\n return this.recordsList != null && this.recordsList.is(':visible');\r\n },\r\n\r\n // Получение записей всех справочников.\r\n getData: function (q, OnSuccess, OnError) {\r\n var me = this;\r\n var rs = me.rsInstance;\r\n // Показывает спиннер вместо иконки с тремя точками.\r\n me.showSpinner();\r\n\r\n // Запоминаем фильтр для которого сделали запрос.\r\n me.lastFilterValue = q;\r\n\r\n if (me.treeMode) {\r\n me.requestTree('', q);\r\n }\r\n else {\r\n me.sendRequests(q).done(function () {\r\n me.hideSpinner();\r\n if (OnSuccess) OnSuccess();\r\n }).fail(function () {\r\n // Скрывает спиннер вместо иконки с тремя точками.\r\n rs.hideSpinner();\r\n if (OnError) OnError();\r\n });\r\n }\r\n },\r\n // Отправляет запросы на сервер для каждого справочника.\r\n sendRequests: function (q) {\r\n var me = this, rs = me.rsInstance;\r\n var requests = [];\r\n\r\n // Прекращаем все предыдущие запросы.\r\n while (me._lastRequests.length > 0) {\r\n me._lastRequests.pop().abort();\r\n }\r\n\r\n // Обновляем результаты фильтрации.\r\n me.fillAvailableGroups();\r\n\r\n // Для пустого запроса не загружаем все справочники, а подгружаем их только при нажатии на стрелочку. Если 1 справочник, то загружаем.\r\n if (!q && Object.keys(me.dataObject.groups).length > 1) {\r\n // Сразу же завершаем запросы, т.к. подгрузка значение осуществляется после нажатия на стрелочку.\r\n return $.when();\r\n }\r\n\r\n // Получаем записи всех справочников.\r\n for (var groupcode in me.dataObject.groups) {\r\n if (groupcode !== 'length') { //Нужно ли исключить группу из обратки.\r\n requests.push(me.sendRequest(q, groupcode));\r\n };\r\n };\r\n me._lastRequests = $.merge(me._lastRequests, requests);\r\n\r\n // Возвращаем $.Deferred объект что бы дождаться завершения всех запросов и только потом открыть модальное окно.\r\n return $.when.apply(this, requests);\r\n },\r\n // Отправляет запрос на сервер для одного справочника.\r\n sendRequest: function (q, groupcode, OnSuccess, OnError) {\r\n var me = this, rs = me.rsInstance;\r\n var OnSuccessFunc = function (status, data) {\r\n me.onSuccessGetData(groupcode, status, data);\r\n // Признак загруженности записей в группе.\r\n me.dataObject.groups[groupcode].isLoaded = true;\r\n if (OnSuccess) OnSuccess();\r\n };\r\n var OnErrorFunc = function (msg, isHttp) {\r\n me.onErrorGetData(groupcode, msg, isHttp);\r\n // Признак загруженности записей в группе.\r\n me.dataObject.groups[groupcode].isLoaded = true;\r\n if (OnError) OnError();\r\n };\r\n var limit = (MULTI_SELECT_RECORD_COUNT === -1 ? 300 : MULTI_SELECT_RECORD_COUNT + 1); // Загружаем +1 запись, что бы потом выдать сообщение \"Показаны не все\".\r\n return rs.sendQuery(groupcode, q, 1, limit, OnSuccessFunc, OnErrorFunc);\r\n },\r\n //Успешное получение записей одного справочника.\r\n onSuccessGetData(refcode, status, rows) {\r\n if (rows.length) {\r\n for (let row of rows) {\r\n // Иногда может прийти в виде ПОЛ_123123\r\n let refCode;\r\n let id = row.id;\r\n if (row.id.includes('_')) {\r\n [refCode, id] = row.id.split('_');\r\n }\r\n\r\n this.dataObject.groups[refcode].items.push({\r\n id,\r\n name: row.encodedTitle,\r\n refCode,\r\n });\r\n\r\n // Если уже достигли ограничения, а еще остались, то отображаем сообщение \"Показаны не все\".\r\n if (Object.keys(this.dataObject.groups[refcode].items).length === MULTI_SELECT_RECORD_COUNT && rows.length >= MULTI_SELECT_RECORD_COUNT) {\r\n this._isNotAllRecordsShown = true;\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n //Неуспешное получение записей одного справочника.\r\n onErrorGetData: function (refcode, msg, isHttp) {\r\n var me = this;\r\n // Если там ошибка и она не тот что записей не найдено, сохраним её для вывода в шапке.\r\n if (msg !== L('NO_RECORDS_FOUND')) {\r\n // В некоторых случаях нужно отображать разные сообщения в заголовке и при раскрытии.\r\n me.dataObject.groups[refcode].error = msg.split('^')[0];\r\n };\r\n },\r\n\r\n //Возвращает индекс найденного элемента по ИД.\r\n findSelectedItemById: function (id) {\r\n var me = this,\r\n selItems = me.dataObject.selectedItems;\r\n for (var i = 0, len = selItems.length; i < len; i++) {\r\n if (selItems[i].id === id) {\r\n return i;\r\n };\r\n };\r\n return -1;\r\n },\r\n\r\n // Показывает спиннер.\r\n showSpinner: function () {\r\n var me = this, rs = me.rsInstance;\r\n // Показывает спиннер в строке фильтра.\r\n if (me.filterSpinner) me.filterSpinner.addClass('processing');\r\n // Показывает спиннер вместо иконки с тремя точками.\r\n if (rs) rs.showSpinner();\r\n },\r\n // Скрывает спиннер.\r\n hideSpinner: function () {\r\n var me = this, rs = me.rsInstance;\r\n // Скрывает спиннер в строке фильтра.\r\n if (me.filterSpinner) me.filterSpinner.removeClass('processing');\r\n // Скрывает спиннер вместо иконки с тремя точками.\r\n if (rs) rs.hideSpinner();\r\n },\r\n\r\n showModalWindow: function () {\r\n var me = this, rs = me.rsInstance;\r\n\r\n // если группа только одна то не отображаем ее заголовок в списке и в таблице нет колонки с названиями групп\r\n me.withGroupColumn = Object.keys(me.dataObject.groups).length > 1;\r\n me.html = me.buildHtml();\r\n if (me.html) {\r\n var dialog = new WA.CMP.dialogs.BaseDialog({\r\n title: (rs ? rs.Label : ''),\r\n html: me.html,\r\n okText: L(\"OK\"),\r\n cancelText: L(\"CANCEL\"),\r\n dialogClass: 'stat_MultiselectModalWindow',\r\n width: 890,\r\n height: 500,\r\n isShowCancelButton: !rs.isReadonly(),\r\n onClose: function () {\r\n if (WA.ENV.isAndroid()) {\r\n rs.inp.removeAttr('disabled');\r\n $('.fakeInput').removeAttr('disabled');\r\n }\r\n me.hideContextMenu();\r\n key.setScope('common');\r\n },\r\n ok: function () {\r\n //OK\r\n me.save();\r\n }, cancel: function () { /* Cancel */ }\r\n });\r\n dialog.show();\r\n\r\n key.setScope('modalwindow');\r\n me._InitInternalObjects();\r\n me.fillItemsList();\r\n me.fillSelectedItemsTable();\r\n me._InitEvents();\r\n me._fixSelectedItemsTableBorder();\r\n me._adjustModalWindowIfSmallScreen();\r\n me._disableRefSelectInputIfAndroid();\r\n\r\n // Событие \"После открытия окна\".\r\n me.fire('OnAfterOpen');\r\n }\r\n },\r\n\r\n hideContextMenu: function () {\r\n $('#mainContextMenuContainer').css('visibility', 'hidden');\r\n },\r\n\r\n // Заполняет список доступных групп.\r\n fillAvailableGroups: function () {\r\n var me = this, rs = me.rsInstance;\r\n me.dataObject.groups = {};\r\n // Получаем записи всех справочников.\r\n var i = 0;\r\n for (var refcode in rs.refcodes) {\r\n if ($.inArray(refcode, me.excludeGroups) === -1) { //Нужно ли исключить группу из обратки.\r\n // Пока записей нет.\r\n me.dataObject.groups[refcode] = {\r\n groupname: me.rsInstance.refcodes[refcode].Caption,\r\n isLoaded: false,\r\n items: []\r\n };\r\n i++;\r\n }\r\n }\r\n },\r\n\r\n show: function () {\r\n var me = this, rs = me.rsInstance;\r\n // Получаем выбранные элементы.\r\n me.dataObject.selectedItems = rs.getValues();\r\n // Заполняем список доступных групп.\r\n me.fillAvailableGroups();\r\n // Получаем дерево без фильтра.\r\n me.getData('', function () {\r\n me.showModalWindow();\r\n });\r\n },\r\n\r\n // Сохраняет выбранные элементы в скрытом поле выбора из справочника.\r\n save: function () {\r\n var me = this, rs = me.rsInstance;\r\n // Сохранение в режиме \"только для чтения\" не работает.\r\n if (!rs.isReadonly()) {\r\n rs.setValues(me.dataObject.selectedItems, true);\r\n me.inp.trigger('change');\r\n }\r\n },\r\n\r\n /*--------------------------------------------*/\r\n\r\n\r\n /* Построение html по полученному объекту */\r\n\r\n buildHtml: function () {\r\n var me = this;\r\n var html = me.buildLeftArea();\r\n html += me.buildSelectedRecords();\r\n return html;\r\n },\r\n\r\n buildSelectedRecords: function () {\r\n var html = '
    ' + L('SELECTED_RECORDS') + ':
    ';\r\n html += '
    ';\r\n html += this.buildSelectedItemsTable();\r\n html += '
    ';\r\n return html;\r\n },\r\n\r\n buildSelectedItemsTable: function () {\r\n var me = this, rs = me.rsInstance;\r\n var html = '';\r\n // Не добавляем колонку для удаления записи, если только для чтения.\r\n if (!rs.isReadonly()) {\r\n html += '';\r\n }\r\n html += '';\r\n if (me.withGroupColumn) {\r\n html += '';\r\n }\r\n html += '
    ' + L('NAME') + '' + L('REFERENCE') + '
    ';\r\n return html;\r\n },\r\n\r\n fillSelectedItemsTable: function () {\r\n var me = this,\r\n html = \"\";\r\n var selItems = me.dataObject.selectedItems;\r\n for (var i = 0, len = selItems.length; i < len; i++) {\r\n html += this.buildSelectedItemsTableRow(selItems[i]);\r\n }\r\n me.selectedRecordsTable.append(html);\r\n },\r\n\r\n //REVIEW Название не говорящее.\r\n buildSelectedItemsTableRow: function (selectedItem) {\r\n var me = this, rs = me.rsInstance;\r\n var html = '';\r\n // Не добавляем колонку для удаления записи, если только для чтения.\r\n if (!rs.isReadonly()) {\r\n html += '

    ';\r\n }\r\n // Получить представление справочника\r\n var controlId = me.inp.attr('id');\r\n var requisite = WA.CR.form.getRequisiteByControlId(controlId);\r\n\r\n var viewNameParam = \"\";\r\n if (requisite) {\r\n var referenceViewName = requisite.referenceViewName();\r\n if (referenceViewName) viewNameParam = \"&refview=\" + encodeURI(referenceViewName);\r\n }\r\n\r\n // Нужно ли отображать подсказку.\r\n const href = `/Reference.aspx?sys=${g_SysCode}&ext=${g_ExtName}&compcode=${encodeURI(selectedItem.groupcode)}${viewNameParam}&id=${selectedItem.id}`;\r\n const link = ``;\r\n var hintData = rs.getHintData(selectedItem.groupcode, selectedItem.id, selectedItem.name);\r\n html += '';\r\n if (me.withGroupColumn) {\r\n html += '
    ' + (me.dataObject.groups[selectedItem.groupcode] ? link + me.dataObject.groups[selectedItem.groupcode].groupname + '' : '') + '
    ';\r\n }\r\n html += '';\r\n return html;\r\n },\r\n\r\n buildLeftArea: function () {\r\n var me = this, rs = me.rsInstance;\r\n var tooltip = this._BuildPlaceholderString();\r\n var html = '
    ';\r\n html += '
    ' + L('ALL_RECORDS') + ':
    ';\r\n\r\n var filterDisabledAttr = !rs.isReadonly() ? '' : 'disabled=\"disabled\" readonly=\"readonly\" ';\r\n //Шамов А.: Для единообразия убрал placeholder, что бы крутые браузеры не отображали его.\r\n html += '

    ';\r\n\r\n html += '
    ';\r\n html += '
    ';\r\n return html;\r\n },\r\n\r\n fillItemsList() {\r\n let html = '';\r\n\r\n if (this._isNotAllRecordsShown) {\r\n this.showGroupsListMessage(L('NOT_ALL_RECORDS_SHOWN'));\r\n } else {\r\n this.hideGroupsListMessage();\r\n }\r\n\r\n let groupNames = Object.keys(this.dataObject.groups);\r\n if (groupNames.length === 1) {\r\n for (let groupName of groupNames) {\r\n html += this.buildItemsList(groupName, this.dataObject.groups[groupName]);\r\n }\r\n } else if (groupNames.length) {\r\n html += this.buildGroupsList(this.dataObject.groups);\r\n }\r\n\r\n if (html) {\r\n this._updateRecordsList(html);\r\n } else {\r\n this.showInfoInGroupsList(this._isFilterEmpty() ? L('ENTER_FILTER_VALUE') : L('EMPTY_WITH_FILTER'));\r\n }\r\n\r\n this.MarkSelectedRecordsInList();\r\n this.recordsList.scrollTop(0);\r\n },\r\n\r\n buildGroupsList: function (groups) {\r\n var me = this;\r\n var html = \"\";\r\n\r\n for (var groupcode in groups) {\r\n // Не отображаем справочники, в которых не нашли записей, но отображаем если была какая-то ошибка.\r\n if (groupcode != \"length\" && (!groups[groupcode].isLoaded || groups[groupcode].items.length > 0 || typeof groups[groupcode].error !== 'undefined')) {\r\n html += me.buildSingleGroup(groups[groupcode], groupcode);\r\n }\r\n }\r\n return html;\r\n },\r\n\r\n buildSingleGroup: function (group, key) {\r\n var me = this;\r\n var html = \"\";\r\n html += '
    ' +\r\n '

    ' + group.groupname + '
    ';\r\n html += me.buildItemsList(key, group);\r\n html += '
    ';\r\n return html;\r\n },\r\n\r\n //REVIEW Название не говорящее -какие ItemsList? в дереве или таблице?.\r\n buildItemsList: function (groupcode, group) {\r\n var me = this, rs = me.rsInstance;\r\n var items = group.items;\r\n var html = \"\";\r\n\r\n if (items.length == 0 && typeof (group.error) != 'undefined') {\r\n g_group = group;\r\n var record = { id: -1, name: group.error };\r\n var text = record.name;\r\n var item = '
    ' + text + '
    ';\r\n html += item;\r\n return html;\r\n }\r\n\r\n for (var j = 0; j < items.length; j++) {\r\n if (items[j].groupname) {\r\n html += this.buildSingleGroup(items[j], items[j].compcode);\r\n }\r\n else {\r\n var record = items[j];\r\n // ИД могут быть отрицательные - это информационные сообшения для определенного справочника.\r\n if (record.id > 0) {\r\n // Нужно ли отображать подсказку.\r\n var recordName = record.name.indexOf('

    -1 ? record.name.substr(record.name.indexOf('

    ') + 4) : record.name;\r\n var hintData = rs.getHintData(groupcode, \"\" + record.id, recordName);\r\n var text = '

    ' + recordName + '
    ';\r\n var item = '
    ' + text +\r\n '

    ' +\r\n '' +\r\n '

    ';\r\n html += item;\r\n } else {\r\n //Отобразим информационное сообщение.\r\n me.showGroupsListMessage(record.name);\r\n };\r\n };\r\n };\r\n\r\n return html;\r\n },\r\n\r\n //Отображает сообщение в центре дерева групп.\r\n showInfoInGroupsList: function (msg) {\r\n var me = this;\r\n var container = me.recordsList.data('iscroll') ? me.recordsList.find('#records_scroller') : me.recordsList;\r\n container.html('
    ' + msg + '
    ');\r\n },\r\n\r\n requestTree: function (folder, filter) {\r\n var me = this, rs = me.rsInstance;\r\n var folderId = folder === '' ? folder : folder.attr('id');\r\n return CallService(me.treeUrl,\r\n { ObjectID: \"-1\", ObjectType: \"-1\", FolderID: \"\" + folderId, Filtrator: \"\" + filter },\r\n function (res) {\r\n if (res.Success) {\r\n // Получаем названия всех справочников.\r\n for (var refcode in rs.refcodes) {\r\n if ($.inArray(refcode, me.excludeGroups) === -1) { //Нужно ли исключить группу из обратки.\r\n me.dataObject.groups[refcode] = {\r\n groupname: me.rsInstance.refcodes[refcode].Caption,\r\n items: []\r\n };\r\n }\r\n }\r\n\r\n //Данные получены, открываем модальное окно, что бы создались нужные div\r\n if (!me.isModalShown()) me.showModalWindow();\r\n me.hideSpinner();\r\n //Скроем информационное сообщение.\r\n me.hideGroupsListMessage();\r\n if (folder.length) {\r\n //Подгруппа.\r\n var html = me.fillTree(res.Result);\r\n //var group = me.recordsList.find('#' + folderID);\r\n folder.find('.waiting').remove(); // убираем спинер\r\n me._InitRecordsListEvents(folder.append(html), true);\r\n }\r\n else {\r\n if (res.Result.length > 0) {\r\n me._updateRecordsList(me.fillTree(res.Result));\r\n me._InitRecordsListEvents();\r\n if (res.Result.length == 1 && res.Result[0].id == 0 && res.Result[0].isGroup && res.Result[0].children.length == 0) {\r\n me.showGroupsListMessage(L(\"ADD_USER_TO_FAVORITES_WITH_RIGHT_CLICK\"));\r\n }\r\n } else {//Если результата нет, то значит скрыта орг.структура.\r\n //Невозможно просмотреть дерево пользователей. Воспользуйтесь поиском по имени пользователя или группы.\r\n me.showInfoInGroupsList(me._isFilterEmpty() ? L(\"RIGHTS_SHOWING_TREE_ERROR\") : L('EMPTY_WITH_FILTER'));\r\n };\r\n };\r\n me.MarkSelectedRecordsInList();\r\n };\r\n },\r\n function () { me.hideSpinner(); });\r\n },\r\n\r\n _updateRecordsList: function (html) {\r\n var me = this;\r\n // Оставляем div с сообщением. если активен сколлинг, то убираем внутри контейнера для скрола\r\n var container = me.recordsList.data('iscroll') ? me.recordsList.find('#records_scroller') : me.recordsList;\r\n container.children('div:not(.groupsListMessageBox)').remove();\r\n // Добавляем в начало новые данные.\r\n container.prepend(html);\r\n },\r\n\r\n fillTree: function (nodes) {\r\n var html = \"\";\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].id >= 0) {\r\n html += this.buildTreeNodeHTML(nodes[i]);\r\n } else {\r\n this.showGroupsListMessage(nodes[i].text);\r\n }\r\n }\r\n return html;\r\n },\r\n\r\n buildTreeNodeHTML: function (node) {\r\n var html = node.text;\r\n if (node.children.length > 0) {\r\n html = $(html).append(this.fillTree(node.children));\r\n return html[0].outerHTML;\r\n }\r\n return html;\r\n },\r\n\r\n // Отображает сообщение под деревом.\r\n showGroupsListMessage: function (msg) {\r\n var me = this;\r\n var msgBox = me.recordsList.find('.groupsListMessageBox');\r\n if (msgBox.length == 0) {\r\n msgBox = me.groupsListMessageBox.clone();\r\n me.recordsList.append(msgBox);\r\n };\r\n msgBox.text(msg).show();\r\n },\r\n // Скрывает сообщение под деревом.\r\n hideGroupsListMessage: function () {\r\n var me = this;\r\n me.recordsList.find('.groupsListMessageBox').text('').hide();\r\n },\r\n\r\n /* ---------------------------------- */\r\n\r\n /* Инициализация объектов и событий */\r\n\r\n _InitInternalObjects: function () {\r\n var me = this;\r\n me.selectedRecordsTable = $('#selectedRecordsScrollArea').children('table');\r\n me.recordsList = $('#recordsList');\r\n me.groupsListMessageBox = $('.groupsListMessageBox', me.recordsList);\r\n me.filterInput = $('#filterInput');\r\n //if ($.ipad && !WA.ENV.isAndroid()) me.filterInput.css('width', '100%');\r\n me.filterSpinner = me.filterInput.find('p');\r\n },\r\n\r\n _isFilterEmpty: function () {\r\n return this.filterInput.val().replace(/ /g, \"\") === '';\r\n },\r\n\r\n _InitScrollForTouchScreens: function () {\r\n if ($.scrollActive) {\r\n if (this.recordsList.data('iscroll')) {\r\n //logDebug('refreshScroll');\r\n this.recordsList.data('iscroll').refresh();\r\n // вычитается 20 пикселей чтобы последний элемент в списке было видно при прокрутке\r\n this.recordsList.data('iscroll').maxScrollY -= 20;\r\n } else {\r\n //logDebug('initScroll');\r\n this.recordsList.children().wrapAll('
    ');\r\n var recordsListScroll = new iScroll('recordsList', { useTransform: true });\r\n // вычитается 20 пикселей чтобы последний элемент в списке было видно при прокрутке\r\n recordsListScroll.maxScrollY -= 20;\r\n this.recordsList.data('iscroll', recordsListScroll);\r\n }\r\n }\r\n },\r\n\r\n _InitEvents: function () {\r\n var me = this;\r\n if (me.html != null) {\r\n me._InitSelectedRecordsEvents();\r\n me._InitLeftAreaEvents();\r\n }\r\n },\r\n\r\n _InitLeftAreaEvents: function () {\r\n this._InitRecordsListEvents();\r\n this._InitFilterInputEvents();\r\n },\r\n\r\n _InitRecordsListEvents: function (block, isNeedProcessChild) {\r\n var me = this, rs = me.rsInstance;\r\n var HoverItem = function () { me.HoverItem(this); };\r\n var UnhoverItem = function () { me.UnhoverItem(this); };\r\n\r\n var items = $([]); // = block ? block.find('div.item') : me.recordsList.find('div.item');\r\n if (block) {\r\n if (isNeedProcessChild) {\r\n items = block.find('div.item');\r\n } else {\r\n if (block.hasClass('item')) items = block;\r\n }\r\n } else {\r\n items = me.recordsList.find('div.item');\r\n }\r\n\r\n // Если только на чтение, то запрещаем выбирать записи.\r\n if (!rs.isReadonly()) {\r\n items.find('span > div, p[data-name=\"ArrowRight\"]').off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', function (ev) {\r\n me.SelectItem($(this).parent().parent());\r\n });\r\n\r\n var groups = $(); // = block ? block.find('.recordGroup > span') : me.recordsList.find('.recordGroup > span');\r\n if (block) {\r\n if (isNeedProcessChild) {\r\n groups = block.find('.recordGroup > span');\r\n } else {\r\n if (block.hasClass('recordGroup')) groups = block.children('span');\r\n }\r\n } else {\r\n groups = me.recordsList.find('.recordGroup > span');\r\n }\r\n if (me.treeMode) {\r\n groups.find('p:first').off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', function () {\r\n me.ShowHideRecordsGroup($(this).parent());\r\n });\r\n\r\n me._InitItemsListContextMenu(groups.not('#0'));\r\n me._InitItemsListContextMenu(items);\r\n // Если только на чтение, то запрещаем выбирать группы в дереве.\r\n groups.find('div, p[data-name=\"ArrowRight\"]').off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', function () {\r\n me.SelectItem($(this).parent().parent());\r\n });\r\n } else {\r\n groups.off('click.MultiSelectModalWindow').on('click.MultiSelectModalWindow', function () {\r\n me.ShowHideRecordsGroup(this);\r\n });\r\n }\r\n if (!$.ipad && !WA.ENV.isAndroid()) { // для айпада отключаем ховеры\r\n items.hover(HoverItem, UnhoverItem);\r\n groups.hover(function () { me.HoverGroup($(this).parent()); }, function () { me.UnhoverGroup($(this).parent()); });\r\n }\r\n\r\n //REVIEW Может это в ветке else сделать?\r\n me._InitScrollForTouchScreens();\r\n }\r\n\r\n // Навешивает события для отображения подсказок.\r\n me._initHintEvents(items);\r\n },\r\n\r\n // добавляет кнопочку для контекстного меню на планшетах и навешивает клик\r\n _InitItemsListContextMenu: function (items) {\r\n var me = this;\r\n var favoritesGroup = $('#0');\r\n var ShowContextMenu = function (e, currObj) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var pos = { x: e.pageX, y: e.pageY };\r\n if (currObj) {\r\n //для планшетов\r\n pos.x = currObj.offset().left;\r\n pos.y = currObj.offset().top + 50; //смещаем что бы было видно элемент, для которого вызвали меню.\r\n };\r\n\r\n currObj = currObj ? currObj : $(this);\r\n if (!currObj.attr('id')) currObj = currObj.parent();\r\n var menu = me._GetContextMenu(currObj, favoritesGroup);\r\n menu.showAt({ 'left': pos.x, 'top': pos.y });\r\n };\r\n var ShowContextMenuTablet = function (e) {\r\n var a = $(this).parent().parent().parent();\r\n ShowContextMenu(e, a);\r\n };\r\n\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n items.bind('contextmenu', ShowContextMenu);\r\n favoritesGroup.children('span').unbind('contextmenu');\r\n } else { // для планшетов\r\n var contextMenuBtn = items.find('.tabletcontextm');\r\n if (contextMenuBtn.length > 0) {\r\n contextMenuBtn.off('touchstart.multiselect').on('touchstart.multiselect', ShowContextMenuTablet);\r\n } else {\r\n var contextmenuButton = '';\r\n items.find('p.ico').before(contextmenuButton).prev().off('touchstart.multiselect').on('touchstart.multiselect', ShowContextMenuTablet);\r\n }\r\n favoritesGroup.children('span').find('.tabletcontextm').off('touchstart.multiselect').remove();\r\n }\r\n },\r\n\r\n _InitSelectedRecordsEvents: function () {\r\n var me = this, rs = me.rsInstance;\r\n\r\n var cols = [];\r\n\r\n // Колонка для удаления выбранной записи.\r\n if (!rs.isReadonly()) {\r\n var colWidth = $.ipad || WA.ENV.isAndroid() || WA.ENV.browser.name.toLowerCase() == 'safari' ? '35px' : '15px';\r\n cols.push({ \"sWidth\": colWidth, \"bVisible\": true, \"bSortable\": false });\r\n }\r\n\r\n // Колонка \"Наименование\"\r\n var colWidth = me.withGroupColumn ? '300px' : '400px';\r\n cols.push({ \"bVisible\": true, \"sWidth\": colWidth, \"bSortable\": false });\r\n\r\n // Колонка \"Справочник\"\r\n if (me.withGroupColumn) {\r\n cols.push({ \"bVisible\": true, \"bSortable\": false });\r\n }\r\n\r\n me.selectedRecordsTable.dataTable({\r\n \"sScrollY\": (me.selectedRecordsTable.parent().height() - 33) + 'px',\r\n \"sScrollX\": \"100%\",\r\n \"bAutoWidth\": false,\r\n \"bDeferRender\": true,\r\n \"bPaginate\": false,\r\n \"bSortable\": false,\r\n \"oLanguage\": { \"sZeroRecords\": L(\"EMPTY\") },\r\n 'aoColumns': cols\r\n });\r\n var tableWidth;\r\n if (!$.ipad) {\r\n tableWidth = '100%';\r\n }\r\n if (WA.ENV.isAndroid()) tableWidth = 489; // хаки чтобы таблица не прокручивалась по горизонтали\r\n me.selectedRecordsTable.css('width',tableWidth); // просто через width в Firefox и IE ширина некорректно устанавливалась (v5.5)\r\n me.selectedRecordsTable.find('th:last-child').width('auto');\r\n me.selectedRecordsTable.parent().width(tableWidth).attr('id', 'selectedRecordsWrapper');\r\n $('.dataTables_scrollHeadInner').width(tableWidth)\r\n .children('table').css('width',tableWidth)\r\n .find('th:last-child').width('auto');\r\n me.selectedRecordsTable.find('tr').each(function () { me._InitSingleSelectedRecordEvents(this); });\r\n },\r\n\r\n _InitSingleSelectedRecordEvents(row) {\r\n let rs = this.rsInstance;\r\n row = $(row);\r\n\r\n if(!$.ipad && !WA.ENV.isAndroid()) {\r\n row.hover(\r\n () => row.addClass('over').find('.removeFromSelect').css('visibility', 'visible'),\r\n () => row.removeClass('over').find('.removeFromSelect').css('visibility', 'hidden')\r\n );\r\n }\r\n else {\r\n row.find('.removeFromSelect').css('visibility', 'visible');\r\n }\r\n row.find('.removeFromSelect').on('click.MultiSelectModalWindow', this, function (e) {\r\n e.data.DeleteItemFromSelection(this);\r\n });\r\n\r\n // Навешивает события для отображения подсказок.\r\n this._initHintEvents(row);\r\n },\r\n\r\n // Навешивает события для отображения подсказок.\r\n _initHintEvents: function (el) {\r\n if (!$.ipad && !WA.ENV.isAndroid()) {\r\n el.find('.hint').each(function () {\r\n InitAdditionalInfoTooltip($(this));\r\n });\r\n };\r\n },\r\n\r\n // Навешивает события на поле фильтрации\r\n _InitFilterInputEvents: function () {\r\n var me = this;\r\n var eventName = 'keydown';\r\n //if ($.browser.mozilla) eventName = 'keypress'; убрали так как шифт+таб не работал нормально\r\n me.filterInput.on(eventName + '.MultiSelectModalWindow blur.MultiSelectModalWindow', me, me._KeyPressEventHandler);\r\n me._InitKeyNavigation();\r\n },\r\n\r\n _KeyPressEventHandler: function (ev) {\r\n var me = ev.data;\r\n if ($.inArray(ev.keyCode, me.navigationKeyCodes) > -1) {\r\n if (ev.keyCode == 9) {\r\n $(this).blur();\r\n var firstItem = me.recordsList.find('div:first');\r\n firstItem.hasClass('item') ? me.HoverItem(firstItem) : me.HoverGroup(firstItem);\r\n me.recordsList.scrollTop(0);\r\n return false;\r\n }\r\n //me._NavigationKeyPressHandler(ev);\r\n } else {\r\n me.MakeFilterRequest();\r\n }\r\n },\r\n\r\n _InitKeyNavigation: function () {\r\n var me = this, rs = me.rsInstance;\r\n if (!rs.isReadonly()) {\r\n if (!me.rsInstance.inp.hasClass('modalWindowKeyNavigationActive')) {\r\n var scope = 'modalwindow';\r\n key('down', scope, function () { me.upDownKeyNavigation(true); return false; });\r\n key('up', scope, function () { me.upDownKeyNavigation(false); return false; });\r\n key('right', scope, function () { me.RightArrowKeyPress(); return false; });\r\n key('left', scope, function () { me.LeftArrowKeyPress(); return false; });\r\n key('delete', scope, function () { me.DeleteKeyPress(); return false; });\r\n key('shift+tab', scope, function () {\r\n me.filterInput.focus();\r\n me.UnhoverItem(me.recordsList.find('.over'));\r\n me.UnhoverGroup(me.recordsList.find('.groupOver'));\r\n return false;\r\n });\r\n var selector = '.item.over';\r\n if (this.treeMode) { selector += ',.recordGroup.groupOver'; }\r\n key('enter', scope, function () {\r\n var item = me.recordsList.find(selector).first();\r\n if (item.length) me.SelectItem(item); return false;\r\n });\r\n key.setScope(scope);\r\n me.rsInstance.inp.addClass('modalWindowKeyNavigationActive');\r\n }\r\n }\r\n },\r\n\r\n _BuildPlaceholderString: function () {\r\n var me = this;\r\n if (me.customPlaceholder === null) {\r\n let str = (Object.keys(me.dataObject.groups).length === 1 ? L('MULTI_SEARCH_IN_REFERENCE') : L('MULTI_SEARCH_IN_REFERENCES'));\r\n var i = 0;\r\n var names = [];\r\n for (var key in me.dataObject.groups) {\r\n if (key != 'length') {\r\n names[i] = '"' + me.dataObject.groups[key].groupname + '"';\r\n i++;\r\n }\r\n }\r\n str += names.join(', ');\r\n return str;\r\n } else {\r\n return me.customPlaceholder;\r\n }\r\n },\r\n\r\n // Строит контекстное меню в зависимости от элемента\r\n _GetContextMenu: function (item, favoritesGroup) {\r\n var menuItems = [];\r\n var addMenuItemText;\r\n var addClickHandler;\r\n var favoritesMenuItemText;\r\n var favoritesClickHandler;\r\n var favoritesIcon;\r\n var actionIcon;\r\n var itemID = item.attr('id');\r\n var me = this;\r\n\r\n if (favoritesGroup.children('#' + itemID).length > 0 || item.hasClass('favorite')) {\r\n favoritesMenuItemText = L(\"REMOVE_FROM_FAVORITES\");\r\n favoritesClickHandler = function () {\r\n me.addOrRemoveFavorites(item, itemID, false, favoritesGroup);\r\n };\r\n favoritesIcon = \"deleteFromFavourites-16\";\r\n } else {\r\n favoritesMenuItemText = L(\"ADD_TO_FAVORITES\");\r\n favoritesClickHandler = function () {\r\n me.addOrRemoveFavorites(item, itemID, true, favoritesGroup);\r\n };\r\n favoritesIcon = \"folderFavorites-16\";\r\n }\r\n if (me.findSelectedItemById(itemID) !== -1) {\r\n // то элемент уже выбран\r\n addMenuItemText = L(\"USERGROUP_EXCLUDE\");\r\n addClickHandler = function () {\r\n me.selectedRecordsTable.find('tr#' + itemID).find('p:first').click();\r\n };\r\n actionIcon = \"unchooseRecord-16\";\r\n } else {\r\n addMenuItemText = L(\"USERGROUP_INCLUDE\");\r\n addClickHandler = function () {\r\n me.SelectItem(item);\r\n };\r\n actionIcon = \"chooseRecord-16\";\r\n }\r\n\r\n menuItems.push({ text: addMenuItemText, onClick: addClickHandler, icon: actionIcon, name: 'addMenuItem' });\r\n menuItems.push({ text: favoritesMenuItemText, onClick: favoritesClickHandler, icon: favoritesIcon, name: 'favoritesMenuItem' });\r\n\r\n return new ContextMenu(menuItems, { width: \"auto\", targetElement: item });\r\n },\r\n\r\n // Добавление или удаление пользователей из избранного\r\n // item - элемент, который надо добавить\r\n // needToAdd - нужно ли добавить или удалить\r\n addOrRemoveFavorites: function (item, itemId, needToAdd, favoritesGroup) {\r\n var me = this;\r\n CallService(\"/UserList.asmx/AddOrRemoveFavorites\", { PrincipalID: itemId, IsGroup: item.hasClass('recordGroup'), NeedToAdd: needToAdd },\r\n function (res) {\r\n if (res.Success) {\r\n if (needToAdd) {\r\n if (favoritesGroup.children('#' + itemId).length == 0) {\r\n var clone = item.clone();\r\n me._InitRecordsListEvents(clone, false);\r\n me._InitRecordsListEvents(clone, true); // для инициализации событий у дочерних элементов\r\n clone.appendTo(favoritesGroup);\r\n if (clone.hasClass('recordGroup')) { // если группа, то свернем ее\r\n me.HideRecordsGroup(clone.children('span'));\r\n me.HideRecordsGroup(clone.find('.recordGroup > span'));\r\n }\r\n me.markUnmarkItemAsFavorite(itemId, needToAdd);\r\n favoritesGroup.removeClass('emptyGroup');\r\n }\r\n }\r\n else {\r\n favoritesGroup.children('#' + itemId).remove();\r\n me.markUnmarkItemAsFavorite(itemId, needToAdd);\r\n // Если скрыта оргструктура (кроме избранного ничего не отображается) и в избранном ничего нет, то покажем сообщение,\r\n // что нужно пользоваться поиском\r\n if (favoritesGroup.length != 0 && favoritesGroup.children('div').length == 0) {\r\n if (res.Warning == \"orghidden\") {\r\n me.showGroupsListMessage(L(\"ADD_USER_TO_FAVORITES_WITH_RIGHT_CLICK\"));\r\n }\r\n favoritesGroup.addClass('emptyGroup');\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n // Помечает или снимает отметку избранных пользователей или групп\r\n // isFavorite - признак пометить как избранное или нет\r\n markUnmarkItemAsFavorite: function (id, isFavorite) {\r\n if (id) {\r\n var me = this;\r\n // если айпад, то в recordsList добавляется див для скролла\r\n var favGroup = $.scrollActive ? me.recordsList.children().children('#0') : me.recordsList.children('#0');\r\n var item = favGroup.length > 0 ? favGroup.siblings().find('#' + id) : me.recordsList.find('#' + id);\r\n item = item.add(favGroup.siblings('#' + id));\r\n item = item.add(favGroup.children().find('#' + id));\r\n var icon = item.children('span').find('p.ico');\r\n var iconClass = me.treeModeRecordIconClass;\r\n if (isFavorite) {\r\n if (item.hasClass('item')) { // если это пользователь\r\n if (!item.hasClass('selected')) { // у выбранных записей иконки не меняем\r\n icon.removeClass(iconClass).addClass(me.favoriteUserIconClass);\r\n }\r\n } // если это группа\r\n else {\r\n icon.removeClass(me.treeModeGroupIconClass).addClass(me.favoriteUserGroupIconClass);\r\n }\r\n item.addClass('favorite');\r\n }\r\n else {\r\n if (item.hasClass('item')) { // если это пользователь\r\n if (!item.hasClass('selected')) { // у выбранных записей иконки не меняем\r\n icon.removeClass(me.favoriteUserIconClass).addClass(iconClass);\r\n }\r\n } // если это группа\r\n else {\r\n icon.removeClass(me.favoriteUserGroupIconClass).addClass(me.treeModeGroupIconClass);\r\n }\r\n item.removeClass('favorite');\r\n }\r\n }\r\n },\r\n\r\n /* ------------------------------------- */\r\n\r\n /* Действия с записями */\r\n\r\n //REVIEW Название не говорящее + Комментарий (что за курсор?)\r\n MoveCursor: function (down) {\r\n var me = this;\r\n if (me.recordsList) {\r\n var currentItem = me.recordsList.find('.item.over, .groupOver').first();\r\n if (currentItem.length) { // если уже есть выделенный элемент, то ищем следующий\r\n var obj = me.GetNextItemToSelect(currentItem, down);\r\n if (obj.NextItem.length) {\r\n if (currentItem.hasClass('item')) { // если текущее выделение было на элементе группы\r\n me.ScrollListToHoveredItem(currentItem, down);\r\n me.UnhoverItem(currentItem);\r\n }\r\n else { // если текущее выделение было на заголовке группы\r\n me.ScrollListToHoveredItem(currentItem.children(':first'), down);\r\n me.UnhoverGroup(currentItem);\r\n }\r\n // если следующий элемент - группа, то вызываем соотв-щий ховер\r\n obj.IsGroup ? me.HoverGroup(obj.NextItem) : me.HoverItem(obj.NextItem);\r\n }\r\n }\r\n else { // если в списке не было выделенного элемента\r\n var item;\r\n var isGroup = true;\r\n // при нажатии вниз выделяем заголовок первой группы\r\n if (down) {\r\n item = me.recordsList.find('.recordGroup:first');\r\n if (item.length == 0) { // если группу не нашли то выдеялем первый элемент\r\n item = me.recordsList.find('.item:visible:first');\r\n isGroup = false;\r\n }\r\n }\r\n else { // при нажатии вверх выделяем последний видимый элемент\r\n item = me.recordsList.find('.item:visible:last');\r\n isGroup = false;\r\n if (item.length == 0) { // если элемент не нашли, выделяем заголовок последней свернутой группы\r\n item = me.recordsList.find('.hiddengroup:last');\r\n isGroup = true;\r\n }\r\n }\r\n // если нажали вниз и нет выделенного элемента, то переходим к самому первому\r\n me.recordsList.scrollTop(down ? 0 : 1000000); //REVIEW зачем? - для перемещения скрола в конец или начало списка\r\n isGroup ? me.HoverGroup(item) : me.HoverItem(item);\r\n }\r\n }\r\n },\r\n\r\n upDownKeyNavigation: function (down) {\r\n var me = this;\r\n var currentItem = me.recordsList.find('div.item.over:visible,div.recordGroup.groupOver:visible');\r\n if (currentItem.length) {\r\n // от текущего элемента делаем поиск в 3-х направлениях: в дочерних элементах, в следующих элементах на уровень выше и в элементах того же уровня\r\n var nextItem;\r\n if (down) {\r\n nextItem = currentItem.find('.item:visible:first,.recordGroup:visible:first').first();\r\n if (nextItem.length == 0) { // если не нашли внизу\r\n nextItem = me.findSiblingOrParent(currentItem, down);\r\n }\r\n if (nextItem.html() == currentItem.parent().html()) {\r\n nextItem = currentItem;\r\n }\r\n }\r\n else {\r\n nextItem = me.findSiblingOrParent(currentItem, down);\r\n }\r\n if (nextItem.length) {\r\n currentItem.hasClass('item') ? me.UnhoverItem(currentItem) : me.UnhoverGroup(currentItem);\r\n nextItem.hasClass('item') ? me.HoverItem(nextItem) : me.HoverGroup(nextItem);\r\n me.scrollListToHoveredItem(nextItem, down);\r\n }\r\n }\r\n else {\r\n if (down) {\r\n var item = me.recordsList.find('.item:visible:first,.recordGroup:visible:first').first();\r\n item.hasClass('item') ? me.HoverItem(item) : me.HoverGroup(item);\r\n me.recordsList.scrollTop(0);\r\n }\r\n else {\r\n var item = me.recordsList.find('.item:visible:last,.recordGroup:visible:last').last();\r\n item.hasClass('item') ? me.HoverItem(item) : me.HoverGroup(item);\r\n me.recordsList.scrollTop(100000);\r\n }\r\n }\r\n },\r\n\r\n findSiblingOrParent: function (item, down) {\r\n var nextItem;\r\n if (down) {\r\n nextItem = item.next('div:visible:first'); // ищем след элемент на этом же уровне\r\n if (nextItem.length == 0) { // если не нашли\r\n if (!item.parent('#recordsList').length) { // и если родительский элемент это не все дерево, и значит есть куда подниматься выше\r\n nextItem = this.findSiblingOrParent(item.parents('div:visible:first'), down); // ищем сиблингов у родителя или его родителей\r\n }\r\n else {\r\n nextItem = item;\r\n }\r\n }\r\n }\r\n else { // движение вверх\r\n nextItem = item.prev('div:visible:first'); // ищем сперва сиблинга\r\n var sibling = true;\r\n if (nextItem.length == 0) { // если его не нашли и родительский элемент не само дерево, и значит есть куда подниматься выше\r\n if (!item.parent('#recordsList').length) {\r\n nextItem = item.parents('div:visible:first'); // то берем родителя\r\n sibling = false;\r\n if (nextItem.length == 0) { // если его не нашли, то пытаемся найти сиблинга родителя или его родителей\r\n nextItem = this.findSiblingOrParent(item.parents('div:visible:first'), down);\r\n }\r\n }\r\n else { // если родитель - это все дерево, то мы на крайнем элементе и никуда не двигаемся\r\n nextItem = item;\r\n sibling = false;\r\n }\r\n }\r\n if (sibling) { // если нашли сиблинга, то проверяем наличие дочерних узлов и переходим к ним\r\n var subItem = nextItem.find('.item:visible:last,.recordGroup:visible:last').last();\r\n if (subItem.length) {\r\n nextItem = subItem;\r\n }\r\n }\r\n }\r\n if (nextItem.length && !nextItem.hasClass('item') && !nextItem.hasClass('recordGroup')) {\r\n nextItem = item;\r\n }\r\n return nextItem;\r\n },\r\n\r\n scrollListToHoveredItem: function (item, down) {\r\n var me = this;\r\n if (me.getItemsListHeight() > me.recordsList.height()) {\r\n var itemHeight = 20;\r\n var height = 0;\r\n var currentID = item.attr('id');\r\n var items = me.recordsList.find('div.item:visible,div.recordGroup:visible');\r\n\r\n if (down) {\r\n for (var i = items.length - 1; i >= 0; i--) {\r\n if ($(items[i]).attr('id') == currentID) {\r\n height += (i + 1) * itemHeight;\r\n break;\r\n }\r\n }\r\n if (me.recordsList.height() - height < 50) {\r\n me.recordsList.scrollTop(me.recordsList.scrollTop() + itemHeight);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < items.length; i++) {\r\n if ($(items[i]).attr('id') == currentID) {\r\n height += (i + 1) * itemHeight;\r\n break;\r\n }\r\n }\r\n if (height - me.recordsList.scrollTop() < 50) {\r\n me.recordsList.scrollTop(me.recordsList.scrollTop() - itemHeight);\r\n }\r\n }\r\n }\r\n },\r\n\r\n getItemsListHeight: function () {\r\n var height = 0;\r\n var items = this.recordsList.children();\r\n for (var i = 0; i < items.length; i++) {\r\n height += $(items[i]).height();\r\n }\r\n return height;\r\n },\r\n\r\n // Получает следующий элемент для выделения при навигации стрелочками\r\n GetNextItemToSelect: function (currentItem, down) {\r\n var me = this;\r\n var nextItem;\r\n var isGroup = false;\r\n if (currentItem.hasClass('item')) {\r\n nextItem = down ? currentItem.next('.item:visible') : currentItem.prev('.item:visible');\r\n if (nextItem.length == 0) { // если не нашлись записи то переводим курсор на группу\r\n nextItem = down ? currentItem.parent('.recordGroup').next() : currentItem.parent('.recordGroup');\r\n isGroup = true;\r\n }\r\n }\r\n else {\r\n // здесь nextItem - это группа\r\n nextItem = down ? currentItem.children('.item:visible:first') : currentItem.prev().children('.item:visible:last');\r\n if (nextItem.length == 0) { // если не нашлись записи то переводим курсор на группу\r\n nextItem = down ? currentItem.next() : currentItem.prev();\r\n isGroup = true;\r\n }\r\n }\r\n return { NextItem: nextItem, IsGroup: isGroup };\r\n },\r\n\r\n ScrollListToHoveredItem: function (currentItem, down) {\r\n var me = this;\r\n if (down) {\r\n if (Math.abs(currentItem.position().top - me.recordsList.height()) < 55) { //REVIEW что за магические числа? - вычисленные экспериментальным путем\r\n var scroll = me.recordsList.scrollTop();\r\n me.recordsList.scrollTop(scroll + currentItem.height());\r\n }\r\n }\r\n else {\r\n if (Math.abs(currentItem.position().top) < 104) { //REVIEW что за магические числа?\r\n var scroll = me.recordsList.scrollTop();\r\n me.recordsList.scrollTop(scroll - currentItem.height());\r\n }\r\n }\r\n },\r\n\r\n RightArrowKeyPress: function () {\r\n var me = this;\r\n var title = me.recordsList.find('.groupOver');\r\n // пустые или группы со скрытой структурой не открываем\r\n if (title.length > 0 && !title.hasClass('emptyGroup')) {\r\n me.HoverGroup(title);\r\n me.ShowRecordsGroup(title.children(':first'));\r\n }\r\n },\r\n\r\n LeftArrowKeyPress: function () {\r\n var me = this;\r\n var title = me.recordsList.find('.item.over,.recordGroup.groupOver').parent(':not(#recordsList)');\r\n if (!title.length) { title = me.recordsList.find('.groupOver'); }\r\n if (title.length) {\r\n me.HoverGroup(title);\r\n me.HideRecordsGroup(title.children(':first'));\r\n me.ScrollListToHoveredItem(title.children(':first'), true);\r\n }\r\n },\r\n\r\n DeleteKeyPress: function () {\r\n var me = this;\r\n var idToRemove = me.recordsList.find('.item.over').attr('id');\r\n if (idToRemove) {\r\n var rowDeleteButton = me.selectedRecordsTable.find('tr[id=' + idToRemove + ']').find('.removeFromSelect');\r\n me.DeleteItemFromSelection(rowDeleteButton);\r\n }\r\n },\r\n\r\n ShowHideRecordsGroup: function (groupTitle) {\r\n groupTitle = $(groupTitle);\r\n var gr = groupTitle.parent();\r\n // Группы которые нельзя раскрывать, не расскрываем.\r\n if (!gr.hasClass('emptyGroup')) {\r\n if (groupTitle.parent().hasClass('hiddengroup')) {\r\n this.ShowRecordsGroup(groupTitle);\r\n }\r\n else {\r\n this.HideRecordsGroup(groupTitle);\r\n };\r\n this._InitScrollForTouchScreens();\r\n };\r\n },\r\n\r\n ShowRecordsGroup: function (groupTitle) {\r\n var me = this;\r\n groupTitle.parent().removeClass('hiddengroup');\r\n groupTitle.children().first().removeClass('closedgroup').addClass('openedgroup');\r\n if (me.treeMode) {\r\n if (groupTitle.siblings().length == 0) {\r\n groupTitle.parent().append($('

    '));\r\n me.requestTree(groupTitle.parent(), \"\");\r\n }\r\n } else {\r\n var grEl = groupTitle.parent();\r\n var groupcode = grEl.attr('compcode');\r\n var group = me.dataObject.groups[groupcode];\r\n // Загружаем, если еще не загружали.\r\n if (!group.isLoaded) {\r\n if (grEl.find('.waiting').length == 0) {\r\n grEl.append($('

    '));\r\n };\r\n me.sendRequest('', groupcode, function () {\r\n // Построим элементы группы.\r\n groupTitle.siblings('.waiting').remove();\r\n grEl.append(me.buildItemsList(groupcode, group));\r\n me._InitRecordsListEvents(grEl, true);\r\n me.MarkSelectedRecordsInList();\r\n }, function () {\r\n // Покажем сообщение об ошибке.\r\n groupTitle.siblings('.waiting').remove();\r\n grEl.append(me.buildItemsList(groupcode, group));\r\n });\r\n }\r\n };\r\n },\r\n\r\n HideRecordsGroup: function (groupTitle) {\r\n groupTitle.parent().addClass('hiddengroup');\r\n groupTitle.find('.openedgroup').removeClass('openedgroup').addClass('closedgroup');\r\n },\r\n\r\n MakeFilterRequest: function () {\r\n var me = this;;\r\n if (me.filterInput) {\r\n // Таймаут - что бы сократить количество обращений к серверу\r\n if (me._filterTimeout) clearTimeout(me._filterTimeout);\r\n me._filterTimeout = setTimeout(function () {\r\n var changedValue = me._CheckFilterValue();\r\n if (changedValue !== false) {\r\n me.getData(changedValue, function () {\r\n // Success\r\n me.fillItemsList();\r\n me._InitRecordsListEvents();\r\n });\r\n }\r\n }, 400);\r\n }\r\n },\r\n\r\n _CheckFilterValue: function () {\r\n var me = this;\r\n var currentValue;\r\n currentValue = $.trim(me.filterInput.val());\r\n var whiteSpaceCheck = currentValue.replace(/ /g, \"\"); // убираем все пробелы в строке из поля ввода для проверки на строку из пробелов.\r\n if (currentValue !== me.lastFilterValue) {\r\n if (whiteSpaceCheck !== \"\") {\r\n return currentValue;\r\n } else {\r\n return \"\";\r\n };\r\n } else {\r\n return false;\r\n };\r\n },\r\n\r\n SelectItem(item) {\r\n // Если только для чтения запрещаем выбирать.\r\n if (!this.rsInstance.isReadonly()) {\r\n const jItem = $(item);\r\n const id = jItem.attr('id');\r\n if (!id) {\r\n return ;\r\n }\r\n let groupCode;\r\n if (this.treeMode) {\r\n groupCode = jItem.data('groupcode');\r\n } else if (Object.keys(this.dataObject.groups).length > 1) {\r\n groupCode = jItem.parents('.recordGroup').first().attr('compcode');\r\n } else {\r\n groupCode = this.rsInstance.getFirstRefCode();\r\n }\r\n\r\n const name = item.find('> span div').text();\r\n\r\n // Получить элемент из списка\r\n const listItem = this.dataObject.groups[groupCode].items.find(el => el.id === id);\r\n const newItem = {\r\n groupcode: (!!listItem) ? listItem.refCode || groupCode : groupCode,\r\n id,\r\n name,\r\n };\r\n\r\n this._addItemCollectionToSelectedTable([newItem]);\r\n\r\n this.fire('OnSelectedItem', newItem);\r\n }\r\n },\r\n\r\n // Добавляет новые строки в таблицу выбранных и помечает галочкой в дереве.\r\n _addItemCollectionToSelectedTable: function (items) {\r\n var me = this;\r\n var html = \"\";\r\n for (var i = 0; i < items.length; i++) {\r\n if (me.findSelectedItemById(items[i].id) !== -1) continue;\r\n html += me.buildSelectedItemsTableRow(items[i]);\r\n me.dataObject.selectedItems.push(items[i]);\r\n me.MarkRecord(items[i].id, true);\r\n }\r\n if (html != \"\") {\r\n me.selectedRecordsTable.find('td.dataTables_empty').parent().remove();\r\n me.selectedRecordsTable.append(html);\r\n me.selectedRecordsTable.find('tr').each(function () { me._InitSingleSelectedRecordEvents(this); });\r\n me._fixSelectedItemsTableBorder();\r\n me.selectedRecordsTable.parent().scrollTop(1000000);\r\n }\r\n },\r\n\r\n // Заменяет добавленный элемент на другие.\r\n replaceSelectedItem: function (oldId, newItems) {\r\n var me = this, rs = me.rsInstance;\r\n // Если только для чтения, запрещаем заменять выбранные записи.\r\n if (!rs.isReadonly()) {\r\n // Удаляем элемент по ИД.\r\n me.DeleteItemFromSelection(me.selectedRecordsTable.find('tr[id=\"' + oldId.id + '\"]').find('p.removeFromSelect'));\r\n // Добавляем новые элементы в таблицу.\r\n me._addItemCollectionToSelectedTable(newItems);\r\n }\r\n },\r\n\r\n DeleteItemFromSelection: function (item) {\r\n var me = this, rs = me.rsInstance;\r\n // Если только для чтения, запрещаем удалять выбранные записи.\r\n if (!rs.isReadonly()) {\r\n var row = $(item).parent().parent();\r\n var id = row.attr('id');\r\n\r\n var idx = me.findSelectedItemById(id);\r\n if (idx !== -1) {\r\n me.dataObject.selectedItems.splice(idx, 1);\r\n };\r\n\r\n row.remove();\r\n me.MarkRecord(id, false);\r\n me._fixSelectedItemsTableBorder();\r\n me.checkEmptyTable();\r\n }\r\n },\r\n\r\n HoverGroup: function (group) {\r\n this.UnhoverGroup(this.recordsList.find('.groupOver'));\r\n $(group).addClass('groupOver');\r\n this.UnhoverItem(this.recordsList.find('.over'));\r\n },\r\n\r\n UnhoverGroup: function (group) {\r\n $(group).removeClass('groupOver').addClass('fake');\r\n },\r\n\r\n HoverItem: function (item) {\r\n var me = this;\r\n me.UnhoverItem(this.recordsList.find('.over'));\r\n me.UnhoverGroup(this.recordsList.find('.groupOver'));\r\n $(item).addClass('over').find('.treeview_img_action').css('visibility', 'visible');\r\n },\r\n\r\n UnhoverItem: function (item) {\r\n $(item).removeClass('over').find('.treeview_img_action').css('visibility', 'hidden');\r\n },\r\n\r\n MarkSelectedRecordsInList: function () {\r\n var me = this,\r\n selItems = me.dataObject.selectedItems;\r\n for (var i = 0, len = selItems.length; i < len; i++) {\r\n me.MarkRecord(selItems[i].id, true);\r\n }\r\n },\r\n\r\n MarkRecord: function (id, mark) {\r\n if (id) {\r\n var item = this.recordsList.find('.item[id=' + id + '],.recordGroup[id=' + id + ']');\r\n var icon = item.find('p.ico');\r\n var isGroup = item.hasClass('recordGroup');\r\n var iconClass;\r\n var favoritesItem;\r\n if (this.treeMode) {\r\n favoritesItem = this.recordsList.find('#0').children('#' + id);\r\n if (item.hasClass('favorite')) { // если есть в избранных\r\n iconClass = isGroup ? this.favoriteUserGroupIconClass : this.favoriteUserIconClass;\r\n }\r\n else {\r\n iconClass = isGroup ? this.treeModeGroupIconClass : this.treeModeRecordIconClass;\r\n }\r\n //если группа избранное\r\n if (item.find('div[title=\"Favorites\"]').length > 0) {\r\n iconClass = this.favoriteUserGroupIconClass;\r\n }\r\n }\r\n else {\r\n iconClass = this.defaultRecordIconClass;\r\n }\r\n var markedIconClass = this.treeMode ? (isGroup ? this.treeModeMarkedGroupIconClass : this.treeModeMarkedRecordIconClass) : this.defaultMarkedRecordIconClass;\r\n if (mark) {\r\n item.addClass('selected');\r\n if (this.treeMode) { icon.removeClass(this.treeModeRecordIconClass).removeClass(this.favoriteUserIconClass); }\r\n icon.removeClass(iconClass).addClass(markedIconClass);\r\n }\r\n else {\r\n item.removeClass('selected');\r\n icon.removeClass(markedIconClass).addClass(iconClass);\r\n // в группе избранное иконки со звездочкой заменяем на обычные. значение iconClass определяется выше в if(this.treeMode)\r\n if (this.treeMode) {\r\n favoritesItem.find('p.ico').removeClass(iconClass).addClass(isGroup ? this.treeModeGroupIconClass : this.treeModeRecordIconClass);\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Добавлем бордер к div в которой находится таблица.\r\n _fixSelectedItemsTableBorder: function () {\r\n var me = this;\r\n var p = me.selectedRecordsTable.parent();\r\n if (me.selectedRecordsTable.height() > p.height()) {\r\n p.addClass('fixBorderBottom');\r\n } else {\r\n p.removeClass('fixBorderBottom');\r\n };\r\n },\r\n\r\n _adjustModalWindowIfSmallScreen: function () {\r\n var me = this;\r\n if ($(window).width() < 1000) {\r\n me.recordsList.parents('[role=dialog]').css('left', 50).css('top', 200);\r\n $(window).scrollLeft(0);\r\n }\r\n },\r\n\r\n _disableRefSelectInputIfAndroid: function () {\r\n if (WA.ENV.isAndroid()) {\r\n this.rsInstance.inp.attr('disabled', true);\r\n $('.fakeInput').attr('disabled', true);\r\n }\r\n },\r\n\r\n checkEmptyTable: function () {\r\n var rows = this.selectedRecordsTable.children('tbody').find('tr');\r\n if (rows.length == 0) {\r\n var emptyRow = $('' + L('EMPTY') + '');\r\n this.selectedRecordsTable.append(emptyRow);\r\n this._InitSingleSelectedRecordEvents(emptyRow);\r\n }\r\n }\r\n\r\n };\r\n\r\n $.fn.extend({\r\n MultiSelectModalWindow: function (opt) {\r\n this.data('MultiSelectModalWindowInstance', new MultiSelectModalWindow(this, opt));\r\n return this;\r\n },\r\n ShowMultiSelectModalWindow: function () {\r\n var ms = this.data('MultiSelectModalWindowInstance');\r\n if (ms) ms.show();\r\n return this;\r\n }\r\n });\r\n})(jQuery);\r\n\r\n// Оставлено для примера. не удалять!\r\n//var data = {\r\n// groups:\r\n// {\r\n// length: 2,\r\n// 'ПОЛ': {\r\n// groupname: \"Пользователи\",\r\n// isLoaded: true,\r\n// items: [\r\n// { id: \"1\", name: \"Пупкин Андрей Борисович 1\" },\r\n// { id: \"2\", name: \"Пупкин Андрей Борисович 2\" },\r\n// { id: \"3\", name: \"Пупкин Андрей Борисович 3\" }\r\n// ]\r\n// },\r\n// \"ГПЛ\": {\r\n// groupname: \"Группы пользователей\",\r\n// isLoaded: true,\r\n// items: [\r\n// { id: \"100\", name: \"Группа 1\" },\r\n// { id: \"101\", name: \"Группа 2\" },\r\n// { id: \"102\", name: \"Группа 3\"}//,\r\n// //{ groupname: \"Бухгалтерия\", compcode: \"ПОЛ\", items: [{ id: \"1\", name: \"Пупкин Андрей Борисович 1\" }, { id: \"4\", name: \"Бухгалтер 1\" }, { id: \"5\", name: \"Бухгалтер 2\"}] }\r\n// ]\r\n// }\r\n// },\r\n// selectedItems:\r\n// [\r\n// { groupcode: \"ПОЛ\", id: \"111\", name: \"Пупкин Андрей Борисович\" },\r\n// { groupcode: \"ПОЛ\", id: \"112\", name: \"Иванов Иван Иванович\" },\r\n// { groupcode: \"ПОЛ\", id: \"113\", name: \"Петров Петр Петрович\" }\r\n// ]\r\n//};\r\n","// Команды CardForm.\r\nvar c_CardFormCmd_AddDetailItem = 1;\r\nvar c_CardFormCmd_DeleteDetailItem = 2;\r\n\r\n(function () {\r\n var startMonitoringTime = $.now();\r\n\r\n window.CardForm = function () {\r\n if (typeof console !== 'undefined' && typeof console.warn !== 'undefined') {\r\n log.warn('DEFAULT','Cardform is marked as deprecated since WebAccess 5.0.0.7100 version, use WebAccess.current.form instead');\r\n }\r\n WA.include('/js/cardform.js');\r\n window.CardForm = CardForm;\r\n if (typeof (window.formData) !== 'undefined') CardForm().init(formData);\r\n\r\n var someWait = $.Deferred();\r\n setTimeout(function () { someWait.resolve(); }, 200);\r\n $.when(WA.FormInit, WA.FormControlsInit, someWait).done(function () {\r\n $('html').trigger('CardFormInit');\r\n });\r\n return window.CardForm();\r\n };\r\n\r\n var CardFormInitMonitor = function () {\r\n // Максимум мониторим 3 сек.\r\n if ($.now() - startMonitoringTime > 3000) return;\r\n // Проверяем навесился ли кто-то на CardFormInit, если да, то инициализируем CardForm.\r\n if (typeof (jQuery.event.global['CardFormInit']) !== 'undefined' && typeof (window.formData) !== 'undefined') {\r\n window.CardForm();\r\n } else {\r\n setTimeout(CardFormInitMonitor, 100);\r\n }\r\n };\r\n CardFormInitMonitor();\r\n\r\n})();\r\n","// Показывает все записи в истории\r\nfunction ShowAll() {\r\n DoAction('showall=1', false);\r\n return false;\r\n}","\"use strict\";\r\n\r\n/**\r\n * Предоставляет инструменты для работы с буфером обмена через Агент веб-доступа. Например, скопировать ссылки в буфер обмена.\r\n *\r\n * @namespace window.Core.clipboard\r\n * @since 5.4.0.1000\r\n */\r\n(function (global) {\r\n global.clipboard = {};\r\n\r\n /**\r\n * Копирует ссылки в буфер обмена\r\n * @param {Array} links Массив ссылок вида {ID:..., Type:..., CompCode:..., Description}}\r\n */\r\n function copyLinksToClientBuffer(links) {\r\n var textHtml = \"\";\r\n var textPlain = MakeHrefsFromLinks(links);\r\n links.forEach(function(link) {\r\n textHtml += '} links Массив ссылок вида {ID:..., Type:..., CompCode:..., Description}}\r\n * @return {Deferred} Результат копирования\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n function copyLinksInSessionStorage(links) {\r\n var d = $.Deferred();\r\n CallService(\"/Session.asmx/CopyLinks\", { Links: convertAgentLinksToLinkModels(links) }, function (res) {\r\n if (res.Success) {\r\n d.resolve(res);\r\n }\r\n else {\r\n d.reject(res);\r\n }\r\n });\r\n return d.promise();\r\n }\r\n\r\n /**\r\n * Скопировать массив ссылок в буфер обмена.\r\n *\r\n * @method window.Core.clipboard#copyLinksToClipboard\r\n * @param {Array} links Массив ссылок вида {ID:..., Type:..., CompCode:..., Description}}\r\n * @return {Deferred} Количество скопированных ссылок.\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n global.clipboard.copyLinksToClipboard = function (links) {\r\n var d = $.Deferred();\r\n var copiedLinksCount = 0;\r\n\r\n //Если ничего не скопировано, то сразу выходим\r\n if (!(links) || !(links.length > 0)) {\r\n d.resolve(copiedLinksCount);\r\n return;\r\n }\r\n\r\n //Если мы в IE\r\n if (WA.ENV.browser.name === 'IE') {\r\n WebAccess.agent.isPluginAvailable(\"Clipboard\").always(function(isAvailableResponse) {\r\n //Если агент доступен, копируем через него\r\n if (isAvailableResponse) {\r\n copyLinksInSessionStorage(links);\r\n WebAccess.agent.clipboard.copyLinksToClipboard(links).done(function (res) {\r\n d.resolve(res);\r\n }).fail(function (res) {\r\n d.reject(res.Error);\r\n });\r\n } else {\r\n //Если агент не доступен, то хотя бы в сессию копируем + HTML5 скопирует адрес к объекту\r\n copiedLinksCount = copyLinksToClientBuffer(links);\r\n copyLinksInSessionStorage(links).done(function(res) {\r\n d.resolve(res.Result);\r\n }).fail(function(res) {\r\n d.reject(res.Error);\r\n });\r\n }\r\n });\r\n } else {\r\n //Копируем ссылки через HTML5 + серверные инструменты\r\n copiedLinksCount = copyLinksToClientBuffer(links);\r\n copyLinksInSessionStorage(links).done(function (res) {\r\n d.resolve(res.Result);\r\n }).fail(function (res) {\r\n d.reject(res.Error);\r\n });\r\n }\r\n \r\n return d.promise();\r\n },\r\n \r\n /**\r\n * Скопировать текст в буфер обмена.\r\n *\r\n * @method window.Core.clipboard#copyLinksToClipboard\r\n * @param {string} text Текст для помещения в буфер обмена\r\n */\r\n global.clipboard.copyTextToClipboard = function(text) {\r\n clipboard.copy({\r\n \"text/plain\": text\r\n });\r\n }\r\n\r\n /**\r\n * Получает массив объектов ссылок из буфера обмена.\r\n * @method window.Core.clipboard#getLinksFromClipboard\r\n * @return {array} Массив объектов ссылок.\r\n */\r\n global.clipboard.getLinksFromClipboard = function () {\r\n return WebAccess.agent.clipboard.getLinksFromClipboard();\r\n }\r\n\r\n //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\r\n\r\n})(window.Core);","\r\n(function (global) {\r\n\r\n var pleaseWaitMessage = {\r\n _topSpinner: null,\r\n _pleaseWaitText: $('#SignPleaseWait'),\r\n _pleaseWaitCounter: 0,\r\n show: function () {\r\n this._topSpinner = WA.CR.spinner.show();\r\n this._pleaseWaitText.show();\r\n this._pleaseWaitCounter += 1;\r\n },\r\n hide: function () {\r\n this._pleaseWaitCounter -= 1;\r\n if (this._pleaseWaitCounter === 0) {\r\n this._topSpinner.hide();\r\n this._pleaseWaitText.hide();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Показывает диалог подписания документа. \r\n * @global\r\n * @param {number} id ИД подписываемого документа.\r\n * @param {number} [versionNumber] номер подписываемой версии документа.\r\n * @param {boolean} [isSignCustomwork = false] TRUE если подписание объекта ЗЗУ, иначе FAlSE.\r\n * @param {string} objectType тип объекта (для ЗЗУ)\r\n */\r\n global.SignEDoc = (id, versionNumber, isSignCustomwork = false, objectType) => {\r\n if (WA.agent.checkAvailability()) {\r\n id = id || GetParamInURL('id');\r\n\r\n Core.agent.getPlugin('edmsplugin').done(plugin => {\r\n ShowModalWindow('sign', {\r\n title: L('EDOCUMENT_SIGN'),\r\n afterOpen: () => {\r\n BindHelpIcoClickOnModalWindow('Sign');\r\n const jModalWnd = $('#modal_window');\r\n\r\n // Если подписание невозможно, то в модальном окне не инициализируются контролы для выбора сертификата,\r\n //а только сообщение об ошибке\r\n const isControlsInited = jModalWnd.find('#sign_certificate').length;\r\n if (isControlsInited) {\r\n //если подписание возможно, то докручиваем контролы модалки\r\n if (versionNumber) {\r\n jModalWnd.find(`input[type=radio][value=${versionNumber}]`).click();\r\n }\r\n key.setScope('baseDialog');\r\n\r\n const jTokenPinMessage = jModalWnd.find('#new_error_container');\r\n const jTokenPinInput = jModalWnd.find('.token_pin_code');\r\n\r\n if (jTokenPinMessage.length) {\r\n // Обернуть сообщение и поле ввода для пин-кода нельзя ввиду особенностей рендера диалога.\r\n jTokenPinMessage.parent().hide();\r\n jTokenPinInput.parent().parent().hide();\r\n }\r\n } else {\r\n // Скрываем кнопку Canсel и оставляем активной ОК, если в далоге отображается только сообщение об ошибке\r\n jModalWnd.data('enable_ok')();\r\n jModalWnd.next().find('[data-name=\"CancelButton\"]').hide();\r\n }\r\n },\r\n ok: () => {\r\n // Дизейблим ок, чтобы пользователь не \"ускорял процесс подписания\".\r\n const jWindow = $('#modal_window');\r\n const disableFunction = jWindow.data('disable_ok');\r\n if (typeof disableFunction === 'function' || disableFunction instanceof Function) {\r\n disableFunction();\r\n }\r\n const handler = jWindow.data('ok'); \r\n if (handler && (typeof handler === 'function' || handler instanceof Function)) {\r\n return handler(); \r\n }\r\n },\r\n cancel: () => {\r\n const handler = $('#modal_window').data('cancel'); \r\n if (handler && (typeof handler === 'function' || handler instanceof Function)) {\r\n return handler(); \r\n } \r\n },\r\n params: {\r\n EDocID: id,\r\n IsSignCustomwork: isSignCustomwork,\r\n ObjectType: objectType,\r\n UseAgent: true,\r\n },\r\n height: 'auto',\r\n drag: () => { $('#modal_window').parent().css('height', 'auto'); },\r\n close: () => {\r\n const handler = $('#modal_window').data('close');\r\n clearAllModalDivs();\r\n if (handler) return handler();\r\n },\r\n position: [\r\n 'center',\r\n (windowHeight() / 2) - 200,\r\n ],\r\n });\r\n }).fail(() => {\r\n ShowError(L('ERR_SIGNING_UNSUPPORTED'));\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Инициализирует контроли для диалога окна подписания документа. \r\n * @global\r\n * @param {Array} documentId ИД подписываемого документа или массив ИД документов.\r\n * @param {string} cardTypeCode тип карточки документа.\r\n * @param {boolean} isMultiple TRUE если множественное подписание, иначе - FALSE.\r\n * @param {boolean} isSignCustomwork TRUE если подписание объекта ЗЗУ, иначе - FALSE.\r\n * @param {string} ObjType тип объекта (для ЗЗУ).\r\n * @param {Array} taskIds ид задач для множественного подписания.\r\n * @param {Array} jobIds ид заданий для множественного подписания.\r\n * @param {Array} taskNames темы задач для множественного подписания.\r\n * @param {Array} jobNames темы заданий для множественного подписания.\r\n */\r\n global.SignEDoc_InitControls = function (documentId, cardTypeCode, isMultiple, isSignCustomwork, ObjType, taskIds, jobIds, taskNames, jobNames) {\r\n\r\n const jModalWindow = $('#modal_window'); \r\n let verData = {};\r\n let certData = {};\r\n let addInfo = {};\r\n\r\n // Сохраняем функцию в data, чтобы был доступ к ней в глобальной области видимости (нужно для контролей реквизитов)\r\n jModalWindow.data('checkConditions', () => {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n });\r\n jModalWindow.data('certSelect', () => {\r\n certSelect(jModalWindow, certData, verData, addInfo);\r\n });\r\n\r\n // Событие нажатия на чекбокс \"подписать за\".\r\n jModalWindow.find('#sign_substitute').change((event) => { \r\n if ($(event.target).is(':checked')) {\r\n\r\n // Загружаем коды пользователей, за которых можно подписать.\r\n pleaseWaitMessage.show();\r\n\r\n let versionNumber = getSelectedVersionNumber(jModalWindow);\r\n getSubstitutedUserCodes(\r\n jModalWindow,\r\n documentId,\r\n isMultiple,\r\n verData,\r\n versionNumber).always(users => {\r\n const curUserCodes = (verData[versionNumber]) ? verData[versionNumber][getIsApproving(jModalWindow) ? 'app' : 'vis'] : users;\r\n if (curUserCodes && curUserCodes.length && curUserCodes !== 'loading') {\r\n $('#sign_user').SetEnabled();\r\n if (isMultiple) {\r\n jModalWindow.data('enable_ok')();\r\n setAllowedUserCodes(jModalWindow, curUserCodes);\r\n } else {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n }\r\n } else {\r\n jModalWindow.data('error')(L('YOU_CANT_SIGN_THIS_DOCUMENT_IN_THE_NAME_OF_SUBSTITUTED_USER_INLINE'));\r\n jModalWindow.data('disable_ok')();\r\n }\r\n pleaseWaitMessage.hide();\r\n });\r\n\r\n } else {\r\n $('#sign_user').SetDisabled();\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n }\r\n });\r\n\r\n // Событие нажатия на чекбокс \"утверждающая подпись\".\r\n jModalWindow.find('#sign_approving').change(() => {\r\n let versionNumber = getSelectedVersionNumber(jModalWindow);\r\n if (getIsSubstitute(jModalWindow)) {\r\n pleaseWaitMessage.show();\r\n getSubstitutedUserCodes(\r\n jModalWindow,\r\n documentId,\r\n isMultiple,\r\n verData,\r\n versionNumber).always(() => {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n pleaseWaitMessage.hide();\r\n });\r\n } else {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n }\r\n });\r\n\r\n // Событие выбора версии.\r\n jModalWindow.find('input[type=\"radio\"]').change((event) => {\r\n const jVersionSelect = $(event.target);\r\n if (jVersionSelect.is(':checked')) {\r\n verSelect(jModalWindow, documentId, isMultiple, certData, verData, jVersionSelect.val(), addInfo);\r\n }\r\n }).change(); // изначально версия выбрана.\r\n\r\n certSelect(jModalWindow, certData, verData, addInfo); // запускаем проверку сертификата.\r\n\r\n // При нажатии на кнопку ОК - подписываем документ.\r\n jModalWindow.data('ok', opt_customWorkSignResults => {\r\n // Сохраняем выбранный тип подписи в профиле пользователя\r\n saveDialogParams(jModalWindow);\r\n\r\n /**\r\n * Подписание множества документов\r\n */\r\n if (isMultiple) {\r\n const signMultiple = function (signResults) {\r\n $.whenAllDone(...signResults).then(() => {\r\n UnlockDocIfNeed(jModalWindow, documentId, isMultiple);\r\n jModalWindow.dialog('close');\r\n (new WA.CMP.NTF.Toast).show(L('MULTIPLE_SIGN_COMFIRMATION'));\r\n jModalWindow.remove();\r\n }).fail((...args) => {\r\n // ToDo: данный хак предназначен для кейса, когда во вложении выбирается один документ и вызывается окно\r\n // подписания. Считается, что документов было несколько, поэтому выводится окно подписания множества\r\n // документов. Эта функция не была готова к такому повороту событий. Можно будет убрать, когда исправят\r\n // пожелание, чтобы отображалось окно подписания документа.\r\n if (args.length === 1) {\r\n args[0] = args[0][0];\r\n }\r\n jModalWindow.dialog('close');\r\n jModalWindow.remove();\r\n\r\n const dialog = new WA.CMP.dialogs.MessageBox({ width: 600 });\r\n const details = new WA.CMP.forms.FormBuilder('signingDetails');\r\n details.setOrientation(ORIENTATION.VERTICAL);\r\n details.addTextFrame('NOT_ALL_OBJECTS_SIGNED_INFORMATION_MESSAGE', `
      ${args.join('')}
    `);\r\n\r\n details.renderAsync().done(data => {\r\n dialog.showError(L('MULTIPLE_SIGN_SUCCESS_WITH_ERROR'), data);\r\n });\r\n });\r\n };\r\n\r\n if (isSignCustomwork) {\r\n let signResults = [];\r\n for (let taskId in taskIds) {\r\n signResults.push(sign(jModalWindow, taskIds[taskId], null, null, taskNames[taskId], true, true, 'T'));\r\n }\r\n for (let jobId in jobIds) {\r\n signResults.push(sign(jModalWindow, jobIds[jobId], null, null, jobNames[jobId], true, true, 'J'));\r\n }\r\n if (opt_customWorkSignResults) {\r\n signResults = signResults.concat(opt_customWorkSignResults);\r\n }\r\n signMultiple(signResults);\r\n }\r\n else {\r\n const selectedVersion = getSelectedVersionNumber(jModalWindow);\r\n\r\n const signVersions = function (versions) {\r\n let signResults = [];\r\n for (let docId in versions) {\r\n signResults.push(sign(jModalWindow, docId, versions[docId][3], versions[docId][0], versions[docId][2], true));\r\n }\r\n for (let taskId in taskIds) {\r\n signResults.push(sign(jModalWindow, taskIds[taskId], null, null, taskNames[taskId], true, true, 'T'));\r\n }\r\n for (let jobId in jobIds) {\r\n signResults.push(sign(jModalWindow, jobIds[jobId], null, null, jobNames[jobId], true, true, 'J'));\r\n }\r\n if (opt_customWorkSignResults) {\r\n signResults = signResults.concat(opt_customWorkSignResults);\r\n }\r\n signMultiple(signResults);\r\n };\r\n\r\n switch (selectedVersion) {\r\n default:\r\n WA.SRV.request('/EDocument.asmx/GetLastVersionForMultipleDocs', {\r\n EDocID: documentId,\r\n OnlyActual: selectedVersion === 'last_actual',\r\n }, { hideSpinner: true }).done(versions => {\r\n signVersions(versions);\r\n }).error(error => {\r\n jModalWindow.dialog('close');\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n });\r\n const dialog = new WA.CMP.dialogs.MessageBox({ width: 600 });\r\n dialog.showError(error);\r\n });\r\n break;\r\n case 'ask':\r\n WA.SRV.request('/EDocument.asmx/GetLastVersionForMultipleDocs', {\r\n EDocID: documentId,\r\n OnlyActual: false,\r\n }, { hideSpinner: true }).done(versions => {\r\n let docsWithManyVersions = [];\r\n for (docId in versions) {\r\n if (versions[docId][1] > 1) {\r\n docsWithManyVersions.push(docId);\r\n }\r\n }\r\n\r\n const askFinished = $.Deferred();\r\n\r\n //Запрашиваем версию для всех документов\r\n if (docsWithManyVersions.length) {\r\n\r\n const getSelectedVersionNumber = function (jDialog) {\r\n return jDialog.find('input[type=\"radio\"]:checked').val();\r\n };\r\n\r\n const buildNextDialog = function () {\r\n const docId = docsWithManyVersions.shift();\r\n if (!docId) {\r\n askFinished.resolve(versions);\r\n return;\r\n }\r\n\r\n const dialog = new WA.CMP.dialogs.BaseDialog();\r\n dialog.setSpinner();\r\n dialog.setTitle(L('VERSION_SELECT'));\r\n dialog.width = 600;\r\n dialog.isShowOkButton = true;\r\n dialog.isShowCancelButton = true;\r\n dialog.show();\r\n\r\n dialog.ok = () => {\r\n const version = getSelectedVersionNumber($('#dialog_content_' + dialog.id));\r\n versions[docId][0] = version;\r\n buildNextDialog();\r\n };\r\n\r\n dialog.cancel = () => {\r\n // Пропускаем документ, т.к. версию так и не выбрали.\r\n delete versions[docId];\r\n buildNextDialog();\r\n };\r\n\r\n WA.SRV.request('/EDocument.asmx/GetVersionListControl', {\r\n EDocID: docId,\r\n OnlyActual: false,\r\n }, { hideSpinner: true }).done(html => {\r\n dialog.setHtml(L('SELECT_FROM_EDOC_VERSION_LIST_CAPTION', ('' + versions[docId][2]).escapeHtml()) + '

    ' + html);\r\n });\r\n };\r\n\r\n buildNextDialog();\r\n } else {\r\n askFinished.resolve(versions);\r\n }\r\n\r\n askFinished.done(versions => {\r\n signVersions(versions);\r\n });\r\n }).error(error => {\r\n jModalWindow.dialog('close');\r\n $.when(WA.FormControlsInit).then(() => {\r\n WA.CMP.NTF.InlineHint.hideAll();\r\n });\r\n const dialog = new WA.CMP.dialogs.MessageBox({ width: 600 });\r\n dialog.showError(error);\r\n });\r\n break;\r\n }\r\n }\r\n } else {\r\n if ((!isSignCustomwork) && (!ObjType)) {\r\n let versionNumber = getSelectedVersionNumber(jModalWindow);\r\n // Выполнить проверку, просмотрен ли документ\r\n runWithCheckReadByUser(jModalWindow, documentId, versionNumber, wrap(function () {\r\n sign(jModalWindow, documentId, cardTypeCode, versionNumber, '', isMultiple);\r\n }, jModalWindow));\r\n } else {\r\n sign(jModalWindow, documentId, null, null, null, isMultiple, isSignCustomwork, ObjType);\r\n }\r\n }\r\n return false; // Возвращаем false, чтоб окно не закрылось.\r\n });\r\n\r\n jModalWindow.data('close', () => {\r\n UnlockDocIfNeed(jModalWindow, documentId, isMultiple);\r\n });\r\n\r\n jModalWindow.data('disable_ok')(); // не разрешаем никуда нажимать, пока все не прогрузилось.\r\n };\r\n\r\n /**\r\n * Показывает контрол запроса пин-кода.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {boolean} withAnimation - признак показа анимации.\r\n */\r\n function showTokenPinControls(jModalWindow, withAnimation) {\r\n // Инициализация контрола по запросу пин-кода для токена.\r\n var jTokenPinMessage = jModalWindow.find('#new_error_container');\r\n var jTokenPinInput = jModalWindow.find('.token_pin_code');\r\n // Обернуть сообщение и поле ввода для пин-кода нельзя ввиду особенностей рендера диалога.\r\n var tokenPinMessageHeight = jTokenPinMessage.parent().height();\r\n var tokenPinInputHeight = jTokenPinInput.parent().parent().height();\r\n\r\n if (jTokenPinMessage.length > 0 && !jTokenPinMessage.is(':visible')) {\r\n jTokenPinMessage.parent().show();\r\n jTokenPinInput.parent().parent().show();\r\n\r\n var pinPadding = 20; // Дополнительный отступ, чтобы не появлялся скролл.\r\n var newHeight = jModalWindow.height() + tokenPinMessageHeight + tokenPinInputHeight + pinPadding;\r\n\r\n if (withAnimation) {\r\n jModalWindow.animate({\r\n height: newHeight\r\n }, 300, function () {\r\n $('.token_pin_code').focus();\r\n });\r\n } else {\r\n jModalWindow.height(newHeight);\r\n $('.token_pin_code').focus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Скрывыет контрол запроса пин-кода.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {boolean} withAnimation - признак показа анимации.\r\n */\r\n function hideTokenPinControls(jModalWindow, withAnimation) {\r\n // Инициализация контрола по запросу пин-кода для токена.\r\n var jTokenPinMessage = jModalWindow.find('#new_error_container');\r\n var jTokenPinInput = jModalWindow.find('.token_pin_code');\r\n // Обернуть сообщение и поле ввода для пин-кода нельзя ввиду особенностей рендера диалога.\r\n var tokenPinMessageHeight = jTokenPinMessage.parent().height();\r\n var tokenPinInputHeight = jTokenPinInput.parent().parent().height();\r\n\r\n if ((jTokenPinMessage.length != 0) && (jTokenPinMessage.parent().is(':visible'))) {\r\n var newHeight = jModalWindow.height() - tokenPinMessageHeight - tokenPinInputHeight;\r\n\r\n if (withAnimation) {\r\n jModalWindow.animate({\r\n height: newHeight\r\n }, 500, function () {\r\n jTokenPinMessage.parent().hide();\r\n jTokenPinInput.parent().parent().hide();\r\n jTokenPinInput.val('');\r\n });\r\n } else {\r\n jModalWindow.height(newHeight);\r\n jTokenPinMessage.parent().hide();\r\n jTokenPinInput.parent().parent().hide();\r\n jTokenPinInput.val('');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает номер выбранной версии.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @return {number} Номер версии, выбранной пользователем.\r\n */\r\n function getSelectedVersionNumber(jModalWindow) {\r\n return jModalWindow.find('input[type=\"radio\"]:checked').val();\r\n }\r\n\r\n /**\r\n * Возвращает признак утверждающей подписи.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n */\r\n function getIsApproving(jModalWindow) {\r\n return jModalWindow.find('#sign_approving').is(':checked');\r\n }\r\n\r\n /**\r\n * Возвращает признак подписания за замещаемого.\r\n * @inner\r\n * @param {object} jModalWindow -модальное окно формы подписания.\r\n */\r\n function getIsSubstitute(jModalWindow) {\r\n return jModalWindow.find('#sign_substitute').is(':checked');\r\n }\r\n\r\n /**\r\n * Возвращает выбранный сертификат.\r\n * @inner\r\n * @param {object} jModalWindow модальное окно формы подписания.\r\n * @return {object} Объект с информацией о сертификате {id: , id_base64: , plugin: , plugin_version: , plugin_version_base64: }\r\n */\r\n function getSelectedCertificate(jModalWindow) {\r\n const certInfo = jModalWindow.find('input[name=\"sign_certificate\"]').val().split('###');\r\n return {\r\n id: certInfo[2],\r\n id_base64: certInfo[1],\r\n plugin: certInfo[0],\r\n plugin_version: certInfo[3],\r\n plugin_version_base64: certInfo[4]\r\n };\r\n }\r\n\r\n /**\r\n * Возвращает ИД пользователя, за которого выполняется подписание.\r\n * @inner\r\n * @param {object} jModalWindow -модальное окно формы подписания.\r\n */\r\n function getSelectedUser(jModalWindow) {\r\n return $.trim(jModalWindow.find('#hSelID_sign_user').val());\r\n }\r\n\r\n /**\r\n * Устанавливает пользователей, за которых можно подписать.\r\n * @inner\r\n * @param {object} jModalWindow -модальное окно формы подписания.\r\n * @param {array} codes - массив кодов пользователей.\r\n */\r\n function setAllowedUserCodes(jModalWindow, codes) {\r\n jModalWindow.find('#hLeadSelID_sign_user').val('SUBS_' + codes.join(';'));\r\n }\r\n\r\n /**\r\n * Получает список замещаемых пользователей, которым доступно подписание.\r\n *\r\n * @inner\r\n * @function getSubstitutedUserCodes\r\n * @param {Object} jModalWindow -модальное окно формы подписания.\r\n * @param {number} edocid - ид документа или массив ид документов для множественного подписания\r\n * @param {boolean} isMultiple - признак множественного подписания\r\n * @param {Object} verData - объект, содержащий информацию для каждой версии:\r\n * verData[verNumber].vis = array[] - массив кодов пользователей, за которых можно подписать визирующей подписью\r\n * verData[verNumber].app = array[] - массив кодов пользователей, за которых можно подписать утверждающей подписью\r\n * verData[verNumber].data.canApprovingSign - возможносит подписания утверждающей подписью\r\n * verData[verNumber].data.signatures - подписи\r\n * @param {number} opt_verNumber - номер версии.\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n function getSubstitutedUserCodes(jModalWindow, edocid, isMultiple, verData, opt_verNumber) {\r\n\r\n var def = $.Deferred();\r\n var signTypeVal = { vis: false, app: true };\r\n var signType = 'vis';\r\n if (getIsApproving(jModalWindow)) {\r\n signType = 'app';\r\n }\r\n\r\n if (isMultiple) {\r\n CallService('/EDocument.asmx/GetSubstitutedUserCodesForMultipleDocuments', { EDocID: edocid, IsApprovingSignType: signTypeVal[signType] }, function (res) {\r\n res = $.trim(res.substr(5));\r\n def.resolve((res === '' ? [] : res.split(';')));\r\n }, function () {\r\n def.reject();\r\n });\r\n return def;\r\n }\r\n\r\n if (verData[opt_verNumber][signType] !== 'loading') {\r\n def.resolve();\r\n } else {\r\n // Грузим список пользователей, за которых мы можем подписать эту версию.\r\n CallService('/EDocument.asmx/GetSubstitutedUserCodes', { EDocID: edocid, VersionNum: opt_verNumber, IsApprovingSignType: signTypeVal[signType] }, function (res) {\r\n res = $.trim(res.substr(5)); // сервис возвращает в убогом формате\r\n verData[opt_verNumber][signType] = (res === '' ? [] : res.split(';'));\r\n def.resolve();\r\n }, function () {\r\n def.reject();\r\n });\r\n }\r\n\r\n return def;\r\n }\r\n\r\n /**\r\n * Событие выбора версии.\r\n * @inner\r\n * @param {object} jModalWindow -модальное окно формы подписания.\r\n * @param {number} edocid - ид документа или массив ид документов для множественного подписания\r\n * @param {boolean} isMultiple - признак множественного подписания\r\n * @param {object} verData - объект, содержащий информацию для каждой версии:\r\n verData[verNumber].vis = array[] - массив кодов пользователей, за которых можно подписать визирующей подписью\r\n verData[verNumber].app = array[] - массив кодов пользователей, за которых можно подписать утверждающей подписью\r\n verData[verNumber].data.canApprovingSign - возможносит подписания утверждающей подписью\r\n verData[verNumber].data.signatures - подписи\r\n * @param {number} verNumber - номер версии.\r\n * @param {object} addInfo - информация о текущем пользователем и виде документа.\r\n * @return {number} - номер версии\r\n */\r\n function verSelect(jModalWindow, edocid, isMultiple, certData, verData, verNumber, addInfo) {\r\n addInfo.userCode = addInfo.userCode || 'loading';\r\n addInfo.docKind = addInfo.docKind || 'loading';\r\n if (isMultiple) {\r\n if (getIsSubstitute(jModalWindow)) {\r\n getSubstitutedUserCodes(jModalWindow, edocid, isMultiple, verData);\r\n }\r\n return verNumber;\r\n }\r\n\r\n pleaseWaitMessage.show();\r\n if (!verData.hasOwnProperty(verNumber)) {\r\n verData[verNumber] = { vis: 'loading', app: 'loading', data: 'loading' }; // в начале все \"loading\", потом заменятся на норм. данные, когда они подгрузятся с сервера.\r\n\r\n if (getIsSubstitute(jModalWindow)) {\r\n getSubstitutedUserCodes(jModalWindow, edocid, isMultiple, verData, verNumber);\r\n }\r\n\r\n // Грузим информацию о состоянии подписей к версии.\r\n CallService('/EDocument.asmx/GetSignState', { EDocID: edocid, VersionNum: verNumber }, function (res) {\r\n if (res.Error) {\r\n verData[verNumber].error = res.Error;\r\n } else {\r\n addInfo.userCode = res.UserCode;\r\n addInfo.docKind = res.Kind;\r\n verData[verNumber].data = { canApprovingSign: res.CanApprovingSign, signatures: res.SignsInfo };\r\n }\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n pleaseWaitMessage.hide();\r\n });\r\n } else {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n pleaseWaitMessage.hide();\r\n }\r\n }\r\n\r\n /**\r\n * Событие выбора сертификата.\r\n * @inner\r\n * @param {object} jModalWindow -модальное окно формы подписания.\r\n * @param {object} certData - объект с информацией о сертификатах и их валидности.\r\n * @param {object} verData - объект, содержащий информацию для каждой версии: \r\n verData[verNumber].vis = array[] - массив кодов пользователей, за которых можно подписать визирующей подписью\r\n verData[verNumber].app = array[] - массив кодов пользователей, за которых можно подписать утверждающей подписью\r\n verData[verNumber].data.canApprovingSign - возможносит подписания утверждающей подписью\r\n verData[verNumber].data.signatures - подписи \r\n * @param {object} addInfo - информация о текущем пользователем и виде документа.\r\n */\r\n function certSelect(jModalWindow, certData, verData, addInfo) {\r\n hideTokenPinControls(jModalWindow, false);\r\n pleaseWaitMessage.show();\r\n var curCert = getSelectedCertificate(jModalWindow);\r\n if (!certData.hasOwnProperty(curCert.sid)) {\r\n certData[curCert.id] = 'loading';\r\n CallService('/Certificates.asmx/IsCertificateValid', { CertificateID: curCert.id_base64 }, function (res) {\r\n certData[curCert.id] = { valid: res.Result };\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n pleaseWaitMessage.hide();\r\n });\r\n }\r\n else {\r\n checkConditions(jModalWindow, certData, verData, addInfo);\r\n pleaseWaitMessage.hide();\r\n }\r\n }\r\n\r\n /**\r\n * Проверка возможности подписания.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {object} certData - объект с информацией о сертификатах и их валидности.\r\n * @param {object} verData - объект, содержащий информацию для каждой версии: \r\n verData[verNumber].vis = array[] - массив кодов пользователей, за которых можно подписать визирующей подписью\r\n verData[verNumber].app = array[] - массив кодов пользователей, за которых можно подписать утверждающей подписью\r\n verData[verNumber].data.canApprovingSign - возможносит подписания утверждающей подписью\r\n verData[verNumber].data.signatures - подписи.\r\n * @param {object} addInfo - информация о текущем пользователем и виде документа.\r\n */\r\n function checkConditions(jModalWindow, certData, verData, addInfo) {\r\n\r\n var verNumber = getSelectedVersionNumber(jModalWindow);\r\n var ver = verData[verNumber];\r\n var error = null;\r\n var isApproving = getIsApproving(jModalWindow);\r\n var isSubstitute = getIsSubstitute(jModalWindow);\r\n var curCert = getSelectedCertificate(jModalWindow);\r\n if (ver) {\r\n try {\r\n if (ver.error) // если произошла ошибка при получении данных с сервера.\r\n throw new Error(ver.error);\r\n if (isSubstitute) {\r\n // Проверка наличия пользователей, за которых можно подписать утверждающей подписью.\r\n if (isApproving) {\r\n if (ver.app == 'loading')\r\n throw new Error('loading');\r\n if (!ver.app.length)\r\n throw new Error('w#' + L('YOU_CANT_SIGN_THIS_DOCUMENT_IN_THE_NAME_OF_SUBSTITUTED_USER_APPROV'));\r\n setAllowedUserCodes(jModalWindow, ver.app);\r\n }\r\n // Проверка наличия пользователей, за которых можно подписать визирующей подписью.\r\n if (!isApproving) {\r\n if (ver.vis == 'loading')\r\n throw new Error('loading');\r\n if (!ver.vis.length)\r\n throw new Error('w#' + L('YOU_CANT_SIGN_THIS_DOCUMENT_IN_THE_NAME_OF_SUBSTITUTED_USER'));\r\n setAllowedUserCodes(jModalWindow, ver.vis);\r\n }\r\n }\r\n if (ver.data != 'loading' && addInfo.docKind != 'loading') {\r\n // Проверка возможности подписания утверждающей подписью.\r\n if (isApproving && !ver.data.canApprovingSign) {\r\n throw new Error('w#' + L('HAVENT_RIGHTS_FOR_APPR_SIGN', addInfo.docKind.Name));\r\n }\r\n // Проверка на то, что версия уже подписана тем же пользователем и сертификатом.\r\n var signErr = 'w#';\r\n var curUserCode, curUserName;\r\n if (isSubstitute) {\r\n // Проверяем подписи от имени другого пользователя.\r\n curUserCode = $.trim(jModalWindow.find('#hSelID_sign_user').val());\r\n curUserName = $.trim(jModalWindow.find('#sign_user').val());\r\n } else {\r\n // Проверяем подписи текущего пользователя.\r\n curUserCode = addInfo.userCode;\r\n }\r\n $.each(ver.data.signatures, function () {\r\n var sign = this;\r\n if (isApproving == (sign.SignatureType == '2') &&\r\n sign.ByUser == curUserCode &&\r\n sign.PluginName == curCert.plugin &&\r\n sign.CertificateID == curCert.id_base64) {\r\n if (isApproving && !isSubstitute)\r\n signErr += L('EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED', verNumber);\r\n else if (!isApproving && !isSubstitute)\r\n signErr += L('EDOC_VERSION_ALREDY_SIGNED', verNumber);\r\n else if (isApproving && isSubstitute)\r\n signErr += L('EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER', verNumber, curUserName);\r\n else if (!isApproving && isSubstitute)\r\n signErr += L('EDOC_VERSION_ALREDY_SIGNED_BY_USER', verNumber, curUserName);\r\n return false;\r\n }\r\n });\r\n if (signErr != 'w#') throw new Error(signErr);\r\n } else {\r\n throw new Error('loading');\r\n }\r\n } catch (ex) {\r\n error = ex.message;\r\n }\r\n }\r\n\r\n var cert = certData[curCert.id];\r\n if (!error && cert && cert != 'loading') {\r\n if (!cert.valid) {\r\n error = L('CERTIFICATE_WITH_ID_IS_NOT_VALID', curCert.id);\r\n }\r\n }\r\n if (error !== null) {\r\n if (error != 'loading') {\r\n if (error.indexOf('w#') == 0) {\r\n jModalWindow.data('warning')(error.substr(2));\r\n } else if (error.indexOf('info#') == 0) {\r\n jModalWindow.data('info')(error.substring(5));\r\n } else {\r\n jModalWindow.data('error')(error);\r\n }\r\n }\r\n jModalWindow.data('disable_ok')();\r\n return false;\r\n } else {\r\n if (!jModalWindow.find('.message-text.wrn').length) jModalWindow.data('error')(null);\r\n jModalWindow.data('enable_ok')();\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * Обновление иконки наличия подписи.\r\n * @inner\r\n * @param {number} docID - ИД документа.\r\n * @param {boolean} isApproving - признак утверждающей подписи.\r\n */\r\n function updateSignIco(docID, isApproving) {\r\n var item = $('div#' + docID);\r\n log.info('DOCUMENT_SIGNING', 'Updating icon for document #' + docID);\r\n\r\n if (item.length) {\r\n var signatureIcon = (item.find('.sign_ico'));\r\n if (signatureIcon.length == 0 || (isApproving && signatureIcon.find('use').attr('xlink:href') != '#signRed-16')) {\r\n signatureIcon.remove();\r\n var signIco = '' +\r\n '' +\r\n '';\r\n item.find('.object-list-item__column_type_icon').append(signIco);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Вызывается, если подписание прошло успешно.\r\n * @inner\r\n * @param {object} jModalWindow модальное окно формы подписания.\r\n * @param {number} docID ИД документа. \r\n * @param {boolean} isMultiple TRUE если множественное подписание, иначе - FALSE.\r\n * @param {boolean} isSignCustomwork TRUE если подписание ЗЗУ, иначе - FALSE.\r\n * @param {string} ObjType тип объекта.\r\n */\r\n function success(jModalWindow, docID, isMultiple, isSignCustomwork, ObjType) {\r\n const isApproving = getIsApproving(jModalWindow);\r\n\r\n if (!isMultiple) {\r\n jModalWindow.dialog('close');\r\n let successMessageCode = 'EDOCUMENT_SIGN_SUCCESS';\r\n if (isSignCustomwork) {\r\n successMessageCode = (ObjType === 'T' ? 'TASK_SIGN_SUCCESS' : 'JOB_SIGN_SUCCESS');\r\n }\r\n ShowTopSpinnerResult(L(successMessageCode), 3000);\r\n }\r\n\r\n if (WA.getLocation() === 'doc') {\r\n if (GetParamInURL('view').toLowerCase() === 'showverlist') {\r\n setTimeout(function () { ReloadVersionList(); }, 500);\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n // Обновить иконку, чтобы отобразить результат подписания.\r\n if ((!isSignCustomwork) && (!ObjType)) {\r\n updateSignIco(docID, getIsApproving(jModalWindow));\r\n\r\n if (isMultiple) {\r\n updateSignIco(docID, isApproving);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Вызывается, если произошла ошибка при подписании.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {string} err - текст ошибки.\r\n */\r\n function fail(jModalWindow, err) {\r\n if (jModalWindow.data('error')) {\r\n jModalWindow.data('error')(err);\r\n jModalWindow.data('enable_ok')();\r\n } else {\r\n var d = new WA.CMP.dialogs.MessageBox();\r\n d.showError(err);\r\n }\r\n }\r\n\r\n /**\r\n * Запуск подписания с проверкой, посмотрел ли пользователь версию документа.\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {number} docID - ИД документа. \r\n * @param {number} versionNum - Номер версии документа. \r\n * @param {object} callback - функция . \r\n */\r\n function runWithCheckReadByUser(jModalWindow, docId, versionNum, callback) {\r\n // Если диалог подтверждения был уже показан, то не надо показывать его еще раз\r\n var confirmed = jModalWindow.data('signConfirmed');\r\n if (confirmed) {\r\n callback();\r\n } else {\r\n WA.SRV.call('/EDocument.asmx/CheckReadByUserState', { EDocID: docId, VersionNum: versionNum }).done(function (res) {\r\n if (res) {\r\n callback();\r\n } else {\r\n // Если последние изменения не просмотрены, показать диалог подтверждения\r\n confirmSignDialog(function () {\r\n jModalWindow.data('signConfirmed', true);\r\n callback();\r\n });\r\n }\r\n }).fail(function () {\r\n callback();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Сохранение типа подписи в профиле пользователя\r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n */\r\n function saveDialogParams(jModalWindow) {\r\n WA.SRV.request('Session.asmx/SetUserProfileSettings', {\r\n ParamName: 'DefaultSignType',\r\n ParamValue: getIsApproving(jModalWindow) ? 'approve' : '',\r\n }, { hideSpinner: true });\r\n }\r\n\r\n /**\r\n * Сохранить информацию о сертификате для подписания ЗЗУ\r\n * @innner\r\n * @function saveSignCustomworkInfo\r\n * @param {certId} ид сертификата\r\n */\r\n function saveSignCustomworkInfo(certId) {\r\n //Этот параметр используется на сервере, поэтому не надо записывать его в json\r\n WA.SRV.request('/Session.asmx/SetUserProfileSettings', {\r\n ParamName: 'CertificateIDForCustomworkSign',\r\n ParamValue: certId,\r\n }, { hideSpinner: true });\r\n }\r\n\r\n /**\r\n * Добавление в текст ошибки наименования документа и ИД документа\r\n * @inner\r\n * @param {string} error текст ошибки.\r\n * @param {string} docName наименование документа.\r\n * @param {number} docId ИД документа.\r\n * @param {string} objtype тип объекта (для ЗЗУ).\r\n */\r\n function getErrorWithDocName(error, docName, docId, objtype) {\r\n let objLink = (new WA.Link(docId, OBJECT_TYPE.EDOCUMENT)).toURL().asString();\r\n let objTypeName = L('DOCUMENT');\r\n if (objtype) {\r\n if (objtype === 'J') {\r\n objLink = (new WA.Link(docId, OBJECT_TYPE.JOB)).toURL().asString();\r\n objTypeName = L('JOB');\r\n } else {\r\n objLink = (new WA.Link(docId, OBJECT_TYPE.TASK)).toURL().asString();\r\n objTypeName = L('TASK');\r\n }\r\n }\r\n if (!error) {\r\n //Сюда может зайти например если вынули токен при подписании и нажали Отмена в окне с токеном\r\n error = L('CERTIFICATE_FOR_SIGNING_OBJECT_IS_NOT_SPECIFIED_OR_SPECIFIED_INCORRECTLY');\r\n }\r\n\r\n return `
  • ${objTypeName} \"${docName}\": ${error}
  • `;\r\n }\r\n\r\n /**\r\n * Вывод диалога подтверждения подписания непрочитанной версии документа\r\n * @inner\r\n * @param {object} okAction - функция вызывающаяся при нажатии Ok .\r\n */\r\n function confirmSignDialog(okAction) {\r\n var confirmDialog = new WA.CMP.dialogs.MessageBox();\r\n confirmDialog.yesNoButtons(okAction);\r\n\r\n var mainText = L('EDOC_CONTINUE_SIGNING');\r\n var additionalText = L('EDOC_VERSION_IS_NOT_READ');\r\n var title = L('CONFIRMATION');\r\n var icon = 'info';\r\n confirmDialog.show(mainText, additionalText, title, icon);\r\n }\r\n\r\n /**\r\n * Декоратор для функций.\r\n * @inner\r\n * @param {object} func - функция для декорирования.\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @return {boolean} Если в функции произошла ошибка (брошено исключение), то вызывает fail и возвращает false. Иначе возвращает true.\r\n */\r\n function wrap(func, jModalWindow) {\r\n return function () {\r\n try {\r\n func.apply(this, arguments);\r\n return true;\r\n } catch (ex) {\r\n var msg = ex.message;\r\n if (msg.indexOf('E_CANT_LOAD_PLUGIN') != -1) {\r\n msg = L('SIGN_PLUGIN_NOT_FOUND');\r\n }\r\n fail(jModalWindow, msg);\r\n return false;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Подписание версии документа.\r\n *\r\n * @inner\r\n * @function sign\r\n * @param {Object} jModalWindow модальное окно формы подписания.\r\n * @param {number} documentId ИД документа.\r\n * @param {string} cardTypeCode тип карточки документа\r\n * @param {number} versionNum номер подписываемой версии.\r\n * @param {string} docName наименование документа.\r\n * @param {boolean} isMultiple TRUE если множественное подписание, иначе FAlSE.\r\n * @param {boolean} isSignCustomwork TRUE если подписание объекта ЗЗУ, иначе FAlSE.\r\n * @param {string} objtype тип объекта (для ЗЗУ)\r\n * @return {Deferred}\r\n * @see https://api.jquery.com/category/deferred-object/\r\n */\r\n function sign(jModalWindow, documentId, cardTypeCode, versionNum, docName, isMultiple, isSignCustomwork, objtype) {\r\n docName = ('' + docName).escapeHtml();\r\n\r\n const d = $.Deferred();\r\n // Дизейблим ок, чтобы пользователь не тыкал куда попало.\r\n jModalWindow.data('disable_ok')();\r\n if (isMultiple) {\r\n if (getIsSubstitute(jModalWindow) && !getSelectedUser(jModalWindow)) {\r\n return d.reject(L('VALUE_OF_REQUIRED_REQUISITE_USER_MUST_BE_SPECIFIED'));\r\n }\r\n } else {\r\n if (getIsSubstitute(jModalWindow) && !getSelectedUser(jModalWindow)) {\r\n throw new Error((L('VALUE_OF_REQUIRED_REQUISITE_USER_MUST_BE_SPECIFIED')));\r\n }\r\n }\r\n\r\n // Версия не передана или её номер не корректный.\r\n if ((+versionNum < 1) && (!isSignCustomwork) && (!objtype)) {\r\n if (isMultiple) {\r\n return d.reject(getErrorWithDocName(L('ERR_NO_VERSIONS_AVAILABLE_WITHOUT_DOCUMENT_NAME'), docName, documentId, objtype));\r\n } else {\r\n throw new Error(format(L('ERR_NO_VERSIONS_AVAILABLE'), docName));\r\n }\r\n }\r\n\r\n const cert = getSelectedCertificate(jModalWindow);\r\n Core.agent.getPlugin('edmsplugin').done(plugin => {\r\n const onSignCallback = function (res) {\r\n if (res.success) {\r\n success(jModalWindow, documentId, isMultiple, isSignCustomwork, objtype);\r\n log.info('DOCUMENT_SIGNING', 'Signing success for document ' + docName);\r\n d.resolve();\r\n } else {\r\n if (!!res.message && (res.result === 'ERR_PIN_REQUIRED')) {\r\n showTokenPinControls(jModalWindow, true);\r\n jModalWindow.data('enable_ok')();\r\n return;\r\n }\r\n //Почистить запись в профиле\r\n WA.cache.serverCache.setItem('CertificateIDForCustomworkSign', '');\r\n\r\n log.info('DOCUMENT_SIGNING', 'Signing failed for document ' + docName);\r\n if (!res.message) {\r\n return; //например, агент отвалился\r\n }\r\n d.reject(getErrorWithDocName(res.message.fromISBuilderToNormal(), docName, documentId, objtype));\r\n\r\n if (!isMultiple) {\r\n if (!!res.message && res.message !== 'CONNECTION_NOT_AVAILABLE') {\r\n fail(jModalWindow, L(res.message));\r\n }\r\n }\r\n }\r\n if (!isMultiple) {\r\n UnlockDocIfNeed(jModalWindow, documentId, isMultiple);\r\n }\r\n };\r\n if ((isSignCustomwork) || (objtype)) {\r\n //Сохранить информацию в профиль о сертификате\r\n saveSignCustomworkInfo(cert.id);\r\n\r\n if (objtype === 'J') {\r\n WebAccess.agent.edms.signJob(\r\n documentId,\r\n cert.id_base64,\r\n cert.plugin,\r\n null,\r\n null,\r\n null,\r\n null,\r\n onSignCallback,\r\n cert.plugin_version_base64,\r\n jModalWindow.find('.token_pin_code').val());\r\n } else {\r\n WebAccess.agent.edms.signTask(\r\n documentId,\r\n cert.id_base64,\r\n cert.plugin,\r\n null,\r\n null,\r\n null,\r\n null,\r\n onSignCallback,\r\n cert.plugin_version_base64,\r\n jModalWindow.find('.token_pin_code').val());\r\n }\r\n }\r\n else {\r\n const edocVersion = getSelectedVersionNumber(jModalWindow);\r\n WA.SRV.request('/EDocument.asmx/GetAdditionalInfo', { EdocId: documentId }, { hideSpinner: true, sync: true }).done(additionalInfo => {\r\n WA.SRV.document.sign(documentId,\r\n cardTypeCode,\r\n versionNum || edocVersion,\r\n cert.id_base64,\r\n cert.plugin,\r\n jModalWindow.find('#sign_comment').val(),\r\n getIsApproving(jModalWindow),\r\n getIsSubstitute(jModalWindow),\r\n getSelectedUser(jModalWindow),\r\n onSignCallback,\r\n additionalInfo,\r\n cert.plugin_version,\r\n jModalWindow.find('.token_pin_code').val()).fail((message) => {\r\n // jModalWindow.parentNode проверяет, был ли удален DOM-элемент\r\n if (jModalWindow.parentNode) {\r\n jModalWindow.data('error')(message);\r\n }\r\n });\r\n });\r\n }\r\n }).fail(() => {\r\n ShowError(L('ERR_SIGNING_UNSUPPORTED'));\r\n });\r\n\r\n return d.promise();\r\n }\r\n\r\n /**\r\n * Разблокировка документа \r\n * @inner\r\n * @param {object} jModalWindow - модальное окно формы подписания.\r\n * @param {number|Array} edocid - ИД документа или массив из ИД документов.\r\n * @param {boolean} isMultiple - признак множественного подписания.\r\n */\r\n function UnlockDocIfNeed(jModalWindow, edocid, isMultiple) {\r\n if (jModalWindow.find('#was_locked').val() == 'True') {\r\n var method = isMultiple ? 'MultipleDocsUnlock' : 'DocUnlock';\r\n CallService('/EDocument.asmx/' + method, { EDocID: edocid });\r\n }\r\n }\r\n\r\n})(window);","/**\r\n * Проверить, что поиск не пуст.\r\n *\r\n * @global\r\n * @function CheckIsSearchNotEmpty\r\n * @param {object} el jQuery-объект поиска.\r\n * @param {string} emptyCriteriaWarningMessage Предупреждение, выводимое в случае, когда поиск ничего не вернул.\r\n * @param {function} callback Callback-функция, вызываемая по окончании поиска.\r\n * @returns {boolean} True - поиск вернул результаты, иначе False.\r\n * @constructor\r\n */\r\nfunction CheckIsSearchNotEmpty(el, emptyCriteriaWarningMessage, callback) {\r\n var isAnyCriteriaFilled = false;\r\n var criteriaContainer = $(el).parents('.Search_Table');\r\n const criterionInputs = criteriaContainer.find(':text:enabled, input[type=hidden], select');\r\n $.each(criterionInputs, (i, criterionInput) => {\r\n // Исключаем критерий архивности\r\n if (!criterionInput.id.endsWith('ArchiveTaginp') && !criterionInput.id.endsWith('ArchiveTag')) {\r\n // хак для reference-полей, вызываем событие, чтобы поле корректно заполнилось/очистилось (bug#22966)\r\n const jCriterionInput = $(criterionInput);\r\n jCriterionInput.click();\r\n isAnyCriteriaFilled = !!jCriterionInput.val().trim();\r\n if (isAnyCriteriaFilled) {\r\n return false;\r\n };\r\n };\r\n });\r\n if (!isAnyCriteriaFilled) {\r\n var dialog = new WA.CMP.dialogs.MessageBox();\r\n dialog.showWarning(emptyCriteriaWarningMessage, null, null, function () {\r\n return false;\r\n });\r\n } else {\r\n callback();\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Нажатие на кнопку Enter запускает поиск.\r\n *\r\n * @global\r\n * @function BindOnEnterToSearchCrit\r\n */\r\nfunction BindOnEnterToSearchCrit() {\r\n $('div.Search_Table').children().children(':not(.Search_Date_Row)').find('input[type=text]').keyup(function (event) {\r\n if (event.keyCode == 13 && $('div.rs_container:visible').length == 0) {\r\n $('input.Search_Btn:visible:first').click();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Очистить критерии поиска.\r\n *\r\n * @global\r\n * @function ClearSearch\r\n * @param {string} searchName Имя поиска.\r\n */\r\nfunction ClearSearch(searchName) {\r\n CustomSearch(searchName);\r\n}\r\n\r\n/**\r\n * Восстановить значения поиска по-умолчанию.\r\n *\r\n * @function _restoreSearchDefaultValues\r\n * @param {string} searchName Имя поиска.\r\n * @private\r\n */\r\nfunction _restoreSearchDefaultValues(searchName) {\r\n let jSearch = $('#Search');\r\n jSearch.children().remove();\r\n jSearch.append(window.searches[searchName]);\r\n ChangePositionSearchButtons(searchName);\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Запустить поиск.\r\n *\r\n * @global\r\n * @function CustomSearch\r\n * @param {string} name Имя поиска\r\n * @param {object} el jQuery-объект поиска.\r\n */\r\nfunction CustomSearch(name, el) {\r\n $('.explorer-header__logo').hide();\r\n $('.show-folder-link').show();\r\n\r\n ClearSelectedElements(el);\r\n SetElementToolBar(el);\r\n $('#Search').show();\r\n $('.quick-search').addClass('disabled');\r\n LoadSearch(name, $('#Search'));\r\n $('#Tree').hide();\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Отобразить поиск заданий.\r\n *\r\n * @global\r\n * @function JobSearch\r\n * @param {object} el jQuery-объект поиска.\r\n */\r\nfunction JobSearch(el) {\r\n CustomSearch(\"JOB_SEARCH\", el);\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Отобразить поиск документов.\r\n *\r\n * @global\r\n * @function SearchEDoc\r\n * @param {object} el jQuery-объект поиска.\r\n */\r\nfunction SearchEDoc(el) {\r\n CustomSearch(\"EDOCUMENT_SEARCH\", el);\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Отобразить поиск задач.\r\n *\r\n * @global\r\n * @function TaskSearch\r\n * @param {object} el jQuery-объект поиска.\r\n */\r\nfunction TaskSearch(el) {\r\n CustomSearch(\"TASK_SEARCH\", el);\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Отобразить общий поиск.\r\n *\r\n * @global\r\n * @function GeneralSearch\r\n * @param {object} el jQuery-объект поиска.\r\n */\r\nfunction GeneralSearch(el) {\r\n CustomSearch(\"GENERAL_SEARCH\", el);\r\n $(\"#tree_container\").redraw();\r\n}\r\n\r\n/**\r\n * Загрузить поиск.\r\n *\r\n * @global\r\n * @function LoadSearch\r\n * @param {string} SearchName Имя поиска\r\n * @param {object} obj jQuery-объект поиска.\r\n */\r\nfunction LoadSearch(SearchName, obj) {\r\n let jSearch = $(`#${SearchName}`);\r\n if (window.searches && window.searches[SearchName]) {\r\n _restoreSearchDefaultValues(SearchName);\r\n } else {\r\n window.searches = window.searches || {};\r\n\r\n $.ajax({\r\n type: 'GET',\r\n dataType: 'html',\r\n url: `DynControl.ashx?c=search&name=${SearchName}`,\r\n cache: false,\r\n success: (res) => {\r\n // Сохраним исходное состояние поиска. Применяется ниже при повторном\r\n // выборе поиска с целью очистки критериев поиска.\r\n window.searches[SearchName] = res;\r\n\r\n if (!CheckForLoginPage(res)) {\r\n obj.children().remove();\r\n obj.append(res);\r\n $('#spinner').hide().redraw();\r\n $('#main_container').redraw();\r\n ChangePositionSearchButtons(SearchName);\r\n }\r\n if (SearchName === 'SrchGeneral') {\r\n DisableIsAllCheckboxNotChecked('', 'input.Search_Btn:first');\r\n }\r\n $(\"#tree_container\").redraw();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Изменяет положение кнопок поиска.\r\n *\r\n * @global\r\n * @function ChangePositionSearchButtons\r\n * @param {string} SearchName Имя поиска.\r\n */\r\nfunction ChangePositionSearchButtons(SearchName) {\r\n setTimeout(function () {\r\n if (typeof SearchName === 'string' || SearchName instanceof String) {\r\n var jSearch = $('#' + SearchName);\r\n var heightNew = windowHeight() - $('#header').height() - $('#toolbar_container').height() - jSearch.find('.LastSearch').height() * 2 - jSearch.find('.Search_Btn_Td').height() * 2 - 13;\r\n var jsearchCriterias = jSearch.find('.Search_Criterias');\r\n var jsearchCriteriasDiv = jSearch.find('.Search_Criterias>div');\r\n var searchCriteriasDivHeight = jsearchCriteriasDiv.height();\r\n var searchCriteriasHeight = jsearchCriterias.height();\r\n if ((searchCriteriasHeight > heightNew) || (jsearchCriteriasDiv.height() > searchCriteriasHeight)) {\r\n jsearchCriterias.css({\r\n height: heightNew,\r\n 'margin-right': '-10px',\r\n 'padding-right': '10px',\r\n overflow: 'scroll',\r\n '-ms-overflow-style': 'scrollbar',\r\n 'overflow-x': 'hidden',\r\n });\r\n }\r\n if (searchCriteriasDivHeight && searchCriteriasDivHeight < heightNew) {\r\n jsearchCriterias.css({\r\n height: jsearchCriteriasDiv.height(),\r\n overflow: 'hidden',\r\n });\r\n }\r\n if ($.ipad || WA.ENV.isAndroid()) {\r\n jsearchCriterias.css({\r\n height: 'inherit',\r\n });\r\n }\r\n }\r\n }, 10);\r\n}\r\n\r\n/**\r\n * Выполняется после поиска.\r\n *\r\n * @global\r\n * @function AfterSearch\r\n * @private\r\n */\r\nfunction AfterSearch() {\r\n var searchId = $('.Search_Table:visible').parent().attr('id');\r\n if (searchId != undefined) {\r\n ChangePositionSearchButtons(searchId);\r\n if (searchId === \"SrchGeneral\") {\r\n DisableIsAllCheckboxNotChecked(\"\", 'input.Search_Btn:first');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Запустить поиск.\r\n *\r\n * @global\r\n * @function ExecuteSearch\r\n * @param {string} name Имя поиска.\r\n * @param {string} sort Сортировка.\r\n *\r\n * @example\r\n * ExecuteSearch(searchName, '-MODIFIED');\r\n */\r\nfunction ExecuteSearch(name, sort) {\r\n var f = $(\"form:first\");\r\n var url = f.attr('action');\r\n ShowTopSpinner(L(\"SEARCHING\"));\r\n url = ChangeParamInURL(url, 'searchname', name);\r\n url = ChangeParamInURL(url, 'mode', 'search');\r\n url = RemoveParamInURL(url, 'show');\r\n if (name == 'SrchGeneral') {\r\n url = ChangeParamInURL(url, 'sort', '-RANK');\r\n } if (sort) {\r\n url = ChangeParamInURL(url, 'sort', sort);\r\n } else {\r\n url = RemoveParamInURL(url, 'sort');\r\n }\r\n url = RemoveParamInURL(url, 'uid');\r\n url = RemoveParamInURL(url, 'refcode');\r\n url = RemoveParamInURL(url, 'treeitem');\r\n f.attr('action', url);\r\n f.submit();\r\n}\r\n\r\n/**\r\n * Запускает поиск последних объектов, с которыми взаимодействовал пользователь.\r\n * @global\r\n * @param {String} searchName - имя поиска\r\n * @param {String} objType - тип искомых объектов\r\n * @function showLastObjects\r\n */\r\nfunction showLastObjects(searchName, objType) {\r\n switch (objType) {\r\n case \"EDOC\":\r\n executeLastActedObjectsSearch(searchName, 'SrchDocPseudoReader', 'SrchDocPseudoReaded', '-MODIFIED');\r\n break;\r\n case \"JOB\":\r\n executeLastActedObjectsSearch(searchName, 'SrchJobPseudoModifier', 'SrchJobPseudoModified', '-CREATED');\r\n break;\r\n case \"TASK\":\r\n executeLastActedObjectsSearch(searchName, 'SrchTaskPseudoModifier', 'SrchTaskPseudoModified', '-MODIFIED');\r\n break;\r\n case \"FOL\":\r\n executeLastActedObjectsSearch(searchName, 'SrchFolPseudoModifier', 'SrchFolPseudoModified', 'NAME');\r\n break;\r\n case \"REF\":\r\n DoAction('mode=lastobjects&sort=-MODIFIED&objtype=REF&searchname=' + searchName + '&-uid', false);\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Заполняет критерии для поиска последних объектов, с которыми взаимодействовал пользователь, и запускает поиск на выполнение.\r\n * @global\r\n * @param {String} searchName - имя поиска\r\n * @param {String} actedByRequisiteId - ИД контрола с реквизитом, определяющим пользователя, для которого выполняется поиск\r\n * @param {String} actedDateRequisiteId - ИД контрола с реквизитом, определяющим дату, за которую требуется произвести поиск\r\n * @param {string} sortBy Сортировка.\r\n * @function executeLastActedObjectsSearch\r\n */\r\nfunction executeLastActedObjectsSearch(searchName, actedByRequisiteId, actedDateRequisiteId, sortBy) {\r\n ClearSearch(searchName);\r\n setTimeout(() => {\r\n //Устанавливаем текущего пользователя\r\n $.when(WA.UserInfoInit).then(() => {\r\n let jRequisite = $('#' + actedByRequisiteId);\r\n jRequisite.Clear();\r\n let newValue = [\r\n `${Constants.usersReference.REFERENCE_NAME}:${WA.current.user.ID}`,\r\n WA.current.user.fullName,\r\n WA.current.user.fullName,\r\n ];\r\n jRequisite.SetValue(newValue, false);\r\n\r\n //Устанавливаем период поиска за последние 2 недели\r\n let lastWeek = (new Date()).getTime() - 2 * 7 * 24 * 60 * 60 * 1000;\r\n let fromDate = new Date(lastWeek);\r\n\r\n $('#Search')\r\n .find(`input[id$=${actedDateRequisiteId}]`)\r\n .val(formatDate(fromDate));\r\n\r\n ExecuteSearch(searchName, sortBy);\r\n });\r\n }, 0);\r\n}"]}