{"version":3,"file":"/home/mikel/workspaces/bee/2017-global-hackaton/ng2-alfresco-aos-editonline/src/services/aos-edit-online-service.ts","sourceRoot":"","sources":["/home/mikel/workspaces/bee/2017-global-hackaton/ng2-alfresco-aos-editonline/src/services/aos-edit-online-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Rx';\nimport {\n  AlfrescoApiService,\n  AlfrescoAuthenticationService,\n  NotificationService,\n  AlfrescoSettingsService,\n  AlfrescoContentService,\n  AlfrescoTranslationService\n} from 'ng2-alfresco-core';\nimport { DocumentActionsService } from 'ng2-alfresco-documentlist';\nimport { MinimalNodeEntity } from 'alfresco-js-api';\n\n@Injectable()\nexport class AOSEditOnlineService {\n\n  static AOS_EDITONLINE_ACTION_HANDLER_KEY: string = 'aos-editonline';\n  static MS_PROTOCOL_NAMES: any = {\n    'doc': 'ms-word',\n    'docx': 'ms-word',\n    'docm': 'ms-word',\n    'dot': 'ms-word',\n    'dotx': 'ms-word',\n    'dotm': 'ms-word',\n    'xls': 'ms-excel',\n    'xlsx': 'ms-excel',\n    'xlsb': 'ms-excel',\n    'xlsm': 'ms-excel',\n    'xlt': 'ms-excel',\n    'xltx': 'ms-excel',\n    'xltm': 'ms-excel',\n    'ppt': 'ms-powerpoint',\n    'pptx': 'ms-powerpoint',\n    'pot': 'ms-powerpoint',\n    'potx': 'ms-powerpoint',\n    'potm': 'ms-powerpoint',\n    'pptm': 'ms-powerpoint',\n    'pps': 'ms-powerpoint',\n    'ppsx': 'ms-powerpoint',\n    'ppam': 'ms-powerpoint',\n    'ppsm': 'ms-powerpoint',\n    'sldx': 'ms-powerpoint',\n    'sldm': 'ms-powerpoint'\n  };\n\n  constructor(\n    private alfrescoApiService: AlfrescoApiService,\n    private alfrescoAuthenticationService: AlfrescoAuthenticationService,\n    private alfrescoSettingsService: AlfrescoSettingsService,\n    private notificationService: NotificationService,\n    private documentActionService: DocumentActionsService,\n    private translationService: AlfrescoTranslationService\n  ) {\n    documentActionService.setHandler(\n      'aos-edit-online',\n      this.onActionEditOnlineAos.bind(this));\n  }\n\n  onActionEditOnlineAos(nodeId: string): Observable<boolean> {\n\n    let opts = {\n      include: ['isLocked', 'path']\n    };\n\n    return Observable.fromPromise(this.alfrescoApiService.getInstance().core.nodesApi.getNode(nodeId, opts)\n      .then((data: any) => {\n        if (data) {\n          let node = data.entry;\n          if (node.isFile) {\n            if (node.isLocked) {\n              let checkedOut = node.aspectNames.contains('cm:checkedOut');\n              let lockOwner = node.properties['cm:lockOwner'];\n              let differentLockOwner = lockOwner.id !== this.alfrescoAuthenticationService.getEcmUsername();\n\n              if (checkedOut && differentLockOwner) {\n                this.onAlreadyLockedNotification(node.id, lockOwner);\n                return false;\n              } else {\n                this.triggerEditOnlineAos(node);\n                return true;\n              }\n            } else {\n              this.triggerEditOnlineAos(node);\n              return true;\n            }\n          }\n        }\n      })\n    );\n  }\n\n  private getUserAgent(): string {\n    return navigator.userAgent.toLowerCase();\n  }\n\n  private isWindows(): boolean {\n    return this.getUserAgent().indexOf('win') !== -1 ? true : false;\n  }\n\n  private isMacOs(): boolean {\n    return this.getUserAgent().indexOf('mac') !== -1 ? true : false;\n  }\n\n  private onAlreadyLockedNotification(nodeId: string, lockOwner: string) {\n      this.notificationService.openSnackMessage(`Document {nodeId} locked by {lockOwner}`, 3000);\n  }\n\n  private getProtocolForFileExtension(fileExtension: string) {\n      return AOSEditOnlineService.MS_PROTOCOL_NAMES[fileExtension];\n  }\n\n  private triggerEditOnlineAos(node: any): void {\n\n    let url = this.onlineEditUrlAos(node);\n    let fileExtension = node.name.split('.').pop() !== null ? node.name.split('.').pop().toLowerCase() : '';\n    let protocolHandler = this.getProtocolForFileExtension(fileExtension);\n\n    if (protocolHandler === undefined) {\n        let message: any = this.translationService.get('AOS.ERROR.NO_PROTOCOL_HANDLER');\n        this.notificationService.openSnackMessage(message.value, 3000);\n        return;\n    }\n\n    if (!this.isWindows() && !this.isMacOs()) {\n        let message: any = this.translationService.get('AOS.ERROR.UNSUPPORTED_CLIENT_OS');\n        this.notificationService.openSnackMessage(message.value, 3000);\n    } else {\n        this.aos_tryToLaunchOfficeByMsProtocolHandler(protocolHandler, url);\n    }\n  }\n\n  private onlineEditUrlAos(node: any): string {\n\n    let pathElements = node.path.elements.slice(1, node.path.elements.length);\n    let path = '/';\n    for (let element of pathElements) {\n      path = path + element.name + '/';\n    }\n\n    let url = this.alfrescoSettingsService.ecmHost + '/alfresco/aos' + path + '/' + node.name;\n    if (encodeURI(url).length > 256) {\n      url = this.alfrescoSettingsService.ecmHost + '/alfresco/aos/' + '_aos_nodeid' + '/' + node.id + '/' + node.name;\n    }\n    return url;\n  }\n\n\n  private aos_tryToLaunchOfficeByMsProtocolHandler(protocolHandler: string, url: string) {\n    let protocolUrl = protocolHandler + ':ofe%7Cu%7C' + url;\n    let protocolHandlerPresent = false;\n\n    let input = document.createElement('input');\n    let inputTop = document.body.scrollTop + 10;\n    input.setAttribute('style', 'z-index: 1000; background-color: rgba(0, 0, 0, 0); border: none; outline: none; position: absolute; left: 10px; top: ' + inputTop + 'px;');\n    document.getElementsByTagName('body')[0].appendChild(input);\n    input.focus();\n    input.onblur = function() {\n      protocolHandlerPresent = true;\n    };\n    location.href = protocolUrl;\n    let that = this;\n    setTimeout(function() {\n      input.onblur = null;\n      input.remove();\n      if (!protocolHandlerPresent) {\n          let message: any = that.translationService.get('AOS.ERROR.UNSUPPORTED_CLIENT_VERSION');\n          that.notificationService.openSnackMessage(message.value, 3000);\n      }\n    }, 500);\n  }\n\n}\n\n"]}