diff lisp/w3/w3-script.el @ 26:441bb1e64a06 r19-15b96

Import from CVS: tag r19-15b96
author cvs
date Mon, 13 Aug 2007 08:51:32 +0200
parents
children ec9a17fef872
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/w3/w3-script.el	Mon Aug 13 08:51:32 2007 +0200
@@ -0,0 +1,92 @@
+;;; w3-script.el --- Scripting support
+;; Author: wmperry
+;; Created: 1997/02/18 23:32:46
+;; Version: 1.4
+;; Keywords: hypermedia, scripting
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Copyright (c) 1997 Free Software Foundation, Inc.
+;;;
+;;; This file is part of GNU Emacs.
+;;;
+;;; GNU Emacs 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 2, or (at your option)
+;;; any later version.
+;;;
+;;; GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to the
+;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;;; Boston, MA 02111-1307, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(require 'cl)
+(require 'w3-elisp)
+(require 'w3-jscript)
+
+;; Event Handlers
+;; onclick              ; It was clicked on
+;; onchange		; Text area was changed
+;; onselect		; Menu choice changed
+;; onmouseover		; Mouse is over us
+;; onmouseout		; Mouse left us
+;; onblur		; We lost focus
+;; onfocus		; We gained focus
+;; onload		; We got loaded
+;; onunload		; We got unloaded
+;; onreset		; Form got reset
+;; onsubmit		; From is about to be submitted
+;; onabort		; User cancelled loading an image
+;; onerror		; Error occurred loading an image
+
+(defvar w3-do-scripting t
+  "*Whether to handle client-side scripting or not.
+If you are ultra-paranoid, set this to `nil'")
+
+(defvar w3-current-scripting-language 'elisp)
+(make-variable-buffer-local 'w3-current-scripting-language)
+
+(put 'form 'w3-event-handlers
+     '(onclick onchange onselect onblur onfocus onreset onsubmit))
+
+(put 'mouse 'w3-event-handlers '(onmouseover onmouseout))
+
+(put 'misc 'w3-event-handlers '(onload onunload))
+
+(put 'all 'w3-event-handlers (append (get 'form 'w3-event-handlers)
+				     (get 'mouse 'w3-event-handlers)))
+
+(defun w3-script-find-event-handlers (pt type)
+  (if w3-do-scripting
+      (let* ((html-stack (get-text-property pt 'html-stack))
+	     (args nil)
+	     (rval nil)
+	     (cur nil))
+	(while html-stack
+	  (setq args (cdr (pop html-stack)))
+	  (while (setq cur (pop args))
+	    (if (memq (car cur) (get type 'w3-event-handlers))
+		(setq rval (cons cur rval)))))
+	(nreverse rval))))
+
+(defun w3-script-evaluate-form (f)
+  (if w3-do-scripting
+      (case w3-current-scripting-language
+	(elisp
+	 (let ((st 0)
+	       (form nil)
+	       (max (length f)))
+	   (while (and (< st max) (setq form (read-from-string f st)))
+	     (setq st (cdr form)
+		   form (car form))
+	     (w3-elisp-safe-eval form))))
+	(otherwise
+	 (error "Unimplemented scripting language: %S"
+		w3-current-scripting-language)))))
+
+(provide 'w3-script)