about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el529
1 files changed, 0 insertions, 529 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el
deleted file mode 100644
index c51f8851843b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-attachment.el
+++ /dev/null
@@ -1,529 +0,0 @@
-;;; slack-attachment.el ---                          -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017  南優也
-
-;; Author: 南優也 <yuyaminami@minamiyuuya-no-MacBook.local>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-(require 'eieio)
-(require 'slack-util)
-(require 'slack-request)
-(require 'slack-selectable)
-
-(defclass slack-attachment ()
-  ((fallback :initarg :fallback :initform nil)
-   (title :initarg :title :initform nil)
-   (title-link :initarg :title_link :initform nil)
-   (pretext :initarg :pretext :initform nil)
-   (text :initarg :text :initform nil)
-   (author-name :initarg :author_name :initform nil)
-   (author-link :initarg :author_link)
-   (author-icon :initarg :author_icon)
-   (fields :initarg :fields :initform '())
-   (image-url :initarg :image_url :initform nil)
-   (image-width :initarg :image_width :initform nil)
-   (image-height :initarg :image_height :initform nil)
-   (thumb-url :initarg :thumb_url)
-   (is-share :initarg :is_share :initform nil)
-   (footer :initarg :footer :initform nil)
-   (color :initarg :color :initform nil)
-   (ts :initarg :ts :initform nil)
-   (author-subname :initarg :author_subname :initform nil)
-   (callback-id :initarg :callback_id :initform nil)
-   (id :initarg :id :initform nil)
-   (actions :initarg :actions :initform '())))
-
-(defclass slack-shared-message (slack-attachment)
-  ((channel-id :initarg :channel_id :initform nil)
-   (channel-name :initarg :channel_name :initform nil)
-   (from-url :initarg :from_url :initform nil)))
-
-(defclass slack-attachment-field ()
-  ((title :initarg :title :initform nil)
-   (value :initarg :value :initform nil)
-   (short :initarg :short :initform nil)))
-
-(defclass slack-attachment-action-confirmation ()
-  ((title :initarg :title :initform nil)
-   (text :initarg :text :type string)
-   (ok-text :initarg :ok_text :type string :initform "Okay")
-   (dismiss-text :initarg :dismiss_text :type string :initform "Cancel")))
-
-(defclass slack-attachment-action ()
-  ((id :initarg :id :type string)
-   (name :initarg :name :type string)
-   (text :initarg :text :type string)
-   (type :initarg :type :type string)
-   (value :initarg :value :initform nil)
-   (confirm :initarg :confirm :initform nil
-            :type (or null slack-attachment-action-confirmation))
-   (style :initarg :style :type string :initform "default")
-   (url :initarg :url :type (or null string) :initform nil)))
-
-(defclass slack-attachment-select-action (slack-attachment-action slack-selectable)
-  ((min-query-length :initarg :min_query_length :type (or null number) :initform nil)))
-
-(defclass slack-attachment-select-action-option (slack-selectable-option) ())
-
-(defclass slack-attachment-select-action-option-group
-  (slack-selectable-option-group) ())
-
-
-
-(defun slack-attachment-action-create (payload)
-  (cl-labels
-      ((create-option (option)
-                      (apply #'make-instance
-                             'slack-attachment-select-action-option
-                             (slack-collect-slots
-                              'slack-attachment-select-action-option
-                              option)))
-       (create-option-group
-        (option-group)
-        (when (plist-get option-group :options)
-          (setq option-group
-                (plist-put option-group
-                           :options
-                           (mapcar #'create-option
-                                   (plist-get option-group :options)))))
-        (apply #'make-instance
-               'slack-attachment-select-action-option-group
-               (slack-collect-slots
-                'slack-attachment-select-action-option-group
-                option-group))))
-    (let* ((properties payload)
-           (type (plist-get payload :type)))
-
-      (when (plist-get payload :confirm)
-        (setq properties (plist-put properties
-                                    :confirm
-                                    (apply #'make-instance
-                                           'slack-attachment-action-confirmation
-                                           (slack-collect-slots
-                                            'slack-attachment-action-confirmation
-                                            (plist-get payload :confirm))))))
-      (cond
-       ((string= type "select")
-        (progn
-          (setq properties
-                (plist-put properties
-                           :options
-                           (mapcar #'create-option
-                                   (plist-get properties :options))))
-          (setq properties
-                (plist-put properties
-                           :option_groups
-                           (mapcar #'create-option-group
-                                   (plist-get properties :option_groups))))
-          (setq properties
-                (plist-put properties
-                           :selected_options
-                           (mapcar #'create-option
-                                   (plist-get properties :selected_options))))
-          (apply #'make-instance 'slack-attachment-select-action
-                 (slack-collect-slots 'slack-attachment-select-action properties))))
-       (t
-        (apply #'make-instance 'slack-attachment-action
-               (slack-collect-slots 'slack-attachment-action properties)))))))
-
-(defun slack-attachment-create (payload)
-  (let ((properties payload))
-    (setq payload
-          (plist-put payload :fields
-                     (mapcar #'(lambda (field)
-                                 (apply #'slack-attachment-field
-                                        (slack-collect-slots 'slack-attachment-field
-                                                             field)))
-                             (append (plist-get payload :fields) nil))))
-    (setq payload
-          (plist-put payload :actions
-                     (mapcar #'slack-attachment-action-create
-                             (plist-get payload :actions))))
-
-    (when (numberp (plist-get payload :ts))
-      (setq payload
-            (plist-put payload :ts (number-to-string (plist-get payload :ts)))))
-
-    ;; (message "PAYLOAD: %s" payload)
-
-    (if (plist-get payload :is_share)
-        (apply #'slack-shared-message "shared-attachment"
-               (slack-collect-slots 'slack-shared-message payload))
-      (apply #'slack-attachment "attachment"
-             (slack-collect-slots 'slack-attachment payload)))))
-
-(defmethod slack-image-spec ((this slack-attachment))
-  (with-slots (image-url image-height image-width) this
-    (when image-url
-      (list image-url image-width image-height slack-image-max-height))))
-
-(defface slack-message-action-primary-face
-  '((t (:box (:line-width 1 :style released-button)
-             :foreground "#2aa198")))
-  "Face used to primary action."
-  :group 'slack)
-
-(defface slack-message-action-danger-face
-  '((t (:box (:line-width 1 :style released-button)
-             :foreground "#FF6E64")))
-  "Face used to danger action."
-  :group 'slack)
-
-(defvar slack-attachment-action-keymap
-  (let ((keymap (make-sparse-keymap)))
-    (define-key keymap (kbd "RET") #'slack-attachment-action-run)
-    (define-key keymap [mouse-1] #'slack-attachment-action-run)
-    keymap))
-
-(defmethod slack-attachment-action-run-payload ((this slack-attachment-action)
-                                                team
-                                                common-payload
-                                                service-id)
-  (with-slots (id name text type value style) this
-    (cons (cons "actions" (list (list (cons "id" id)
-                                      (cons "name" name)
-                                      (cons "text" text)
-                                      (cons "type" type)
-                                      (cons "value" value)
-                                      (cons "style" style))))
-          common-payload)))
-
-(defmethod slack-attachment-action-get-suggestions ((this
-                                                     slack-attachment-select-action)
-                                                    team
-                                                    common-payload
-                                                    service-id
-                                                    after-success)
-  (with-slots (name) this
-    (let ((url "https://slack.com/api/chat.attachmentSuggestion")
-          (params (list (cons "service_id" service-id)
-                        (cons "payload"
-                              (json-encode-alist
-                               (cons
-                                (cons "name" name)
-                                (cons (cons "value"
-                                            (read-from-minibuffer
-                                             (format "Start typing to see results... (minimum: %s) "
-                                                     (oref this min-query-length))))
-                                      common-payload)))))))
-
-      (cl-labels
-          ((log-error (err)
-                      (slack-log (format "Error: %s, URL: %s, PARAMS: %s"
-                                         err
-                                         url
-                                         params)
-                                 team :level 'error))
-           (on-success (&key data &allow-other-keys)
-                       (slack-request-handle-error
-                        (data "slack-attachment-action-get-suggestions"
-                              #'log-error))
-                       (funcall after-success (plist-get data :options))))
-        (slack-request
-         (slack-request-create
-          url
-          team
-          :type "POST"
-          :success #'on-success
-          :params params
-          :sync t))))))
-
-(defmethod slack-attachment-action-selected-options ((this
-                                                      slack-attachment-select-action)
-                                                     team
-                                                     common-payload
-                                                     service-id)
-  (with-slots (data-source) this
-    (cond
-     ((string= data-source "external")
-      (let ((option))
-        (cl-labels
-            ((on-success (options)
-                         (let ((selected
-                                (funcall slack-completing-read-function
-                                         ""
-                                         (cons "" (mapcar #'(lambda (e)
-                                                              (plist-get e :text))
-                                                          options))
-                                         nil t)))
-
-                           (setq option
-                                 (cl-find-if #'(lambda (e)
-                                                 (string= selected
-                                                          (plist-get e :text)))
-                                             options)))))
-          (slack-attachment-action-get-suggestions this
-                                                   team
-                                                   common-payload
-                                                   service-id
-                                                   #'on-success)
-          (if option
-              (list (list (cons "value" (plist-get option :value))))
-            (slack-attachment-action-selected-options
-             this team common-payload service-id)))))
-     ((string= data-source "conversations")
-      (let ((room-id (oref (slack-room-select (append (oref team channels)
-                                                      (oref team groups)
-                                                      (oref team ims))
-                                              team)
-                           id)))
-        (list (list (cons "value" room-id)))))
-     ((string= data-source "channels")
-      (let ((channel-id (oref (slack-room-select (oref team channels)
-                                                 team) id)))
-        (list (list (cons "value" channel-id)))))
-     ((string= data-source "users")
-      (let ((user-id (plist-get (slack--user-select team) :id)))
-        (list (list (cons "value" user-id)))))
-     ((string= data-source "static")
-      (slack-if-let*
-          ((option (slack-selectable-select-from-static-data-source this))
-           (selected-options (list (list (cons "value"
-                                               (oref option value))))))
-          selected-options
-        (error "Option is not selected")))
-     (t (error "%s's data-source: %s is not implemented"
-               (oref this name)
-               (oref this data-source))))))
-
-(defmethod slack-attachment-action-run-payload ((this slack-attachment-select-action)
-                                                team
-                                                common-payload
-                                                service-id)
-  (with-slots (id name text type value style data-source min-query-length) this
-    (slack-if-let*
-        ((selected-options (slack-attachment-action-selected-options this
-                                                                     team
-                                                                     common-payload
-                                                                     service-id)))
-        (cons (cons "actions"
-                    (list (list (cons "id" id)
-                                (cons "name" name)
-                                (cons "text" text)
-                                (cons "type" type)
-                                (cons "style" style)
-                                (cons "data_source" data-source)
-                                (cons "min_query_length" min-query-length)
-                                (cons "selected_options" selected-options))))
-              common-payload)
-      (error "Option is not selected"))))
-
-(defmethod slack-attachment-action-confirm ((this slack-attachment-action))
-  (with-slots (confirm) this
-    (if confirm
-        (with-slots (title text ok-text dismiss-text) confirm
-          (yes-or-no-p (format "%s%s"
-                               (if title
-                                   (format "%s\n" title)
-                                 "")
-                               text)))
-      t)))
-
-(defun slack-attachment-action-run ()
-  (interactive)
-  (slack-if-let* ((buffer slack-current-buffer)
-                  (room (oref buffer room))
-                  (team (oref buffer team))
-                  (type (get-text-property (point) 'type))
-                  (attachment-id (get-text-property (point) 'attachment-id))
-                  (ts (slack-get-ts))
-                  (message (slack-room-find-message room ts))
-                  (action (get-text-property (point) 'action)))
-      (when (slack-attachment-action-confirm action)
-        (slack-if-let* ((callback-id (get-text-property (point) 'callback-id))
-                        (common-payload (list
-                                         (cons "attachment_id" (number-to-string
-                                                                attachment-id))
-                                         (cons "callback_id" callback-id)
-                                         (cons "is_ephemeral" (oref message
-                                                                    is-ephemeral))
-                                         (cons "message_ts" ts)
-                                         (cons "channel_id" (oref room id))))
-                        (service-id (if (slack-bot-message-p message)
-                                        (slack-message-bot-id message)
-                                      "B01")))
-            (let ((url "https://slack.com/api/chat.attachmentAction")
-                  (params (list (cons "payload"
-                                      (json-encode-alist
-                                       (slack-attachment-action-run-payload
-                                        action
-                                        team
-                                        common-payload
-                                        service-id)))
-                                (cons "service_id" service-id)
-                                (cons "client_token"
-                                      (slack-team-client-token team)))))
-              (cl-labels
-                  ((log-error (err)
-                              (slack-log (format "Error: %s, URL: %s, PARAMS: %s"
-                                                 err
-                                                 url
-                                                 params)
-                                         team
-                                         :level 'error))
-                   (on-success (&key data &allow-other-keys)
-                               (slack-request-handle-error
-                                (data "slack-attachment-action-run" #'log-error))))
-                (slack-request
-                 (slack-request-create
-                  url
-                  team
-                  :type "POST"
-                  :params params
-                  :success #'on-success))))
-          (slack-if-let* ((url (oref action url)))
-              (browse-url url))))))
-
-(defmethod slack-attachment-callback-id ((this slack-attachment))
-  (oref this callback-id))
-
-(defmethod slack-attachment-id ((this slack-attachment))
-  (oref this id))
-
-(defmethod slack-attachment-action-face ((this slack-attachment-action))
-  (with-slots (style) this
-    (or (and (string= "danger" style)
-             'slack-message-action-danger-face)
-        (and (string= "primary" style)
-             'slack-message-action-primary-face)
-        'slack-message-action-face)))
-
-(defmethod slack-attachment-action-display-text ((this slack-attachment-action))
-  (replace-regexp-in-string ":" " " (oref this text)))
-
-
-(defmethod slack-attachment-action-display-text ((this slack-attachment-select-action))
-  (let ((base (call-next-method)))
-    (with-slots (selected-options) this
-      (format "%s%s" base (if (and selected-options (car selected-options))
-                              (format " (%s)"
-                                      (slack-selectable-text (car selected-options)))
-                            "")))))
-
-
-(defmethod slack-attachment-action-to-string ((action slack-attachment-select-action)
-                                              attachment team)
-  (with-slots (id name text type data-source style options option-groups) action
-    (let* ((callback-id (slack-attachment-callback-id attachment))
-           (attachment-id (slack-attachment-id attachment))
-           (face (slack-attachment-action-face action)))
-      (propertize (slack-attachment-action-display-text action)
-                  'type type
-                  'face face
-                  'attachment-id attachment-id
-                  'callback-id callback-id
-                  'action action
-                  'keymap slack-attachment-action-keymap))))
-
-(defmethod slack-attachment-action-to-string ((action slack-attachment-action)
-                                              attachment team)
-  (with-slots (id name text type value style) action
-    (let* ((callback-id (slack-attachment-callback-id attachment))
-           (attachment-id (slack-attachment-id attachment))
-           (face (slack-attachment-action-face action)))
-      (propertize (slack-attachment-action-display-text action)
-                  'type type
-                  'face face
-                  'keymap slack-attachment-action-keymap
-                  'attachment-id attachment-id
-                  'callback-id callback-id
-                  'action action))))
-
-(defmethod slack-message-to-string ((attachment slack-attachment) team)
-  (with-slots
-      (fallback text ts color from-url footer fields pretext actions) attachment
-    (let* ((pad-raw (propertize "|" 'face 'slack-attachment-pad))
-           (pad (or (and color (propertize pad-raw 'face (list :foreground (concat "#" color))))
-                    pad-raw))
-           (header-raw (slack-attachment-header attachment))
-           (header (and (not (slack-string-blankp header-raw))
-                        (format "%s\t%s" pad
-                                (propertize header-raw
-                                            'face 'slack-attachment-header))))
-           (pretext (and pretext (format "%s\t%s" pad pretext)))
-           (body (and text (format "%s\t%s" pad (mapconcat #'identity
-                                                           (split-string text "\n")
-                                                           (format "\n\t%s\t" pad)))))
-           (fields (if fields (mapconcat #'(lambda (field)
-                                             (slack-attachment-field-to-string field
-                                                                               (format "\t%s" pad)))
-                                         fields
-                                         (format "\n\t%s\n" pad))))
-           (actions (if actions
-                        (format "%s\t%s"
-                                pad
-                                (mapconcat #'(lambda (action)
-                                               (slack-attachment-action-to-string
-                                                action
-                                                attachment
-                                                team))
-                                           actions
-                                           " "))))
-           (footer (if footer
-                       (format "%s\t%s"
-                               pad
-                               (propertize
-                                (format "%s%s" footer
-                                        (or (and ts (format "|%s" (slack-message-time-to-string ts)))
-                                            ""))
-                                'face 'slack-attachment-footer))))
-           (image (slack-image-string (slack-image-spec attachment)
-                                      (format "\t%s\t" pad))))
-      (slack-message-unescape-string
-       (slack-format-message
-        (or (and header (format "\t%s\n" header)) "")
-        (or (and pretext (format "\t%s\n" pretext)) "")
-        (or (and body (format "\t%s" body)) "")
-        (or (and fields fields) "")
-        (or (and actions (format "\t%s" actions)) "")
-        (or (and footer (format "\n\t%s" footer)) "")
-        (or (and image (< 0 (length image))
-                 (format "\n\t%s\t%s" pad image)) ""))
-       team))))
-
-(defmethod slack-attachment-header ((attachment slack-attachment))
-  (with-slots (title title-link author-name author-subname) attachment
-    (concat (or (and title title-link (slack-linkfy title title-link))
-                title
-                "")
-            (or author-name author-subname ""))))
-
-(defmethod slack-attachment-field-to-string ((field slack-attachment-field) &optional pad)
-  (unless pad (setq pad ""))
-  (let ((title (propertize (or (oref field title) "") 'face 'slack-attachment-field-title))
-        (value (mapconcat #'(lambda (e) (format "\t%s" e))
-                          (split-string (or (oref field value) "") "\n")
-                          (format "\n%s\t" pad))))
-    (format "%s\t%s\n%s\t%s" pad title pad value)))
-
-(defmethod slack-attachment-to-alert ((a slack-attachment))
-  (with-slots (title fallback pretext) a
-    (if (and title (< 0 (length title)))
-        title
-      (if (and pretext (< 0 (length pretext)))
-          (format "%s\n%s" pretext fallback)
-        fallback))))
-
-(defmethod slack-selectable-prompt ((this slack-attachment-select-action))
-  (format "%s :" (oref this text)))
-
-(provide 'slack-attachment)
-;;; slack-attachment.el ends here