Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 38 additions & 4 deletions vimgolf.el
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
;; Steve Purcell (@sanityinc)
;; Adam Collard (@acollard)
;; Siddhanathan Shanmugam (@siddhanathan)
;; Tanner Hoelzel (@thoelze1)

;;; Code:

Expand Down Expand Up @@ -407,18 +408,24 @@ part of the arg list away."
(defvar vimgolf--browse-list nil
"Holds a list of parsed VimGolf challenges.")

(defvar vimgolf--browse-page-number 1
"Holds the page number currently being browsed.")

(defvar vimgolf--browse-last-page nil
"Holds the number of the last page of challenges.")

(defun vimgolf-browse
(&optional force-pull)
"Browse VimGolf challenges in a dedicated buffer.

Optional FORCE-PULL will retrieve challenges again even if
`vimgolf--browse-list' was already generated.

TODO Is there no API for browsing all the challenges?"
`vimgolf--browse-list' was already generated."
(interactive)
(if (or (eq vimgolf--browse-list nil)
force-pull)
(url-retrieve vimgolf-host 'vimgolf-parse-browse-html)
(url-retrieve (concat vimgolf-host "/?page="
(number-to-string vimgolf--browse-page-number))
'vimgolf-parse-browse-html)
(vimgolf-browse-list)
(vimgolf-browse-next)))

Expand Down Expand Up @@ -458,6 +465,13 @@ argument is dropped on the floor."
(with-current-buffer (current-buffer)
(let ((html (vimgolf-parse-html-entites
(replace-regexp-in-string "\n" "" (buffer-string)))))
(if (not vimgolf--browse-last-page)
(progn
(string-match
"<span class=\"last\"><a href=\"/\\?page=\\([0-9]+\\)\">"
html)
(setq vimgolf--browse-last-page
(string-to-number (match-string 1 html)))))
(setq vimgolf--browse-list nil)
(while
(string-match
Expand Down Expand Up @@ -518,6 +532,24 @@ the arg is ignored."
(when challenge-id
(message (cadr (assoc challenge-id vimgolf--browse-list))))))

(defun vimgolf-browse-next-page
()
"Load next page of challenges."
(interactive)
(if (equal vimgolf--browse-page-number vimgolf--browse-last-page)
(message "You are already at the last page")
(setq vimgolf--browse-page-number (+ 1 vimgolf--browse-page-number))
(vimgolf-browse t)))

(defun vimgolf-browse-previous-page
()
"Load previous page of challenges."
(interactive)
(if (equal vimgolf--browse-page-number 1)
(message "You are already at the first page")
(setq vimgolf--browse-page-number (- vimgolf--browse-page-number 1))
(vimgolf-browse t)))

(defun vimgolf-browse-next
()
"Move point to the next challenge."
Expand Down Expand Up @@ -575,6 +607,8 @@ the arg is ignored."
(define-key keymap "g" 'vimgolf-browse-refresh)
(define-key keymap "n" 'vimgolf-browse-next)
(define-key keymap "p" 'vimgolf-browse-previous)
(define-key keymap "N" 'vimgolf-browse-next-page)
(define-key keymap "P" 'vimgolf-browse-previous-page)
keymap)
"Keymap for browsing VimGolf.")

Expand Down