File: main.js

package info (click to toggle)
dwb 20140702hg-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,860 kB
  • ctags: 2,802
  • sloc: ansic: 27,062; makefile: 341; sh: 84
file content (99 lines) | stat: -rw-r--r-- 2,618 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var util = namespace("util");

script.include("util.js");

var DOMStaticMixin = script.include("static.js");
var DOMCtor   = script.include("ctor.js");

/** 
 * Main function returned by require("lib:dom"); 
 *
 * @name DOM
 * @module
 * @constructs Factory
 * @example 
 * var dom = require("lib:dom");
 *
 * Signal.connect("documentLoaded", function(wv, frame) {
 *      var D = dom(frame);
 * });
 *
 * @param {Object} refObject
 *      Either a WebKitWebView or a WebKitWebFrame
 *
 * @returns {Factory}
 *      The factory function for a {@link Collection}
 *
 * */

var DS = Object.create(null, DOMStaticMixin);

var dom = function(wof) {
   var document = wof.document; 
   var window;
   // only use one reference for DOMWindow because a DOMWindow is never
   // destroyed
   if (wof instanceof WebKitWebView) {
       window = script.getPrivate(wof, "domwindow");
       if (!window) {
           window = document.defaultView;
           script.setPrivate(wof, "domwindow", window);
       }
   }
   /** 
    * The factory function for a {@link Collection}.  Every Factory is bound to
    * the reference document obtained during creation of the factory function, so
    * after a page load a new Factory has to be created
    *
    * @name Factory
    * @class
    *
    * @param {String|Element|Array} selector
    *       A CSS- or XPath-selector that will be used to create the Collection,
    *       or an element that used to create the Collection or an Array of
    *       Elements
    * @param {Node} [node]
    *       The reference node used for the query
    *
    * @returns {Collection}
    *       A new Collection
    * */
   var res = function(selector, node) {
       var collection;
       if (DS.isString(selector)) {
           collection = DS.query(node || document, selector);
       }
       else if (DS.isElement(selector)) {
           collection = [selector];
       }
       else if (DS.isArrayLike(selector)) {
           collection = selector;
       }
       return new DOMCtor(document, collection, selector, window);
   };
   Object.defineProperties(res, DOMStaticMixin);
   /**
    * The reference document 
    *
    * @name document 
    * @memberOf Factory.prototype
    * @readonly 
    * @type HTMLDocument
    * */
   /**
    * The reference window 
    *
    * @name window 
    * @memberOf Factory.prototype
    * @readonly 
    * @type DOMWindow
    * */
   Object.defineProperties(res, { 
       document : { value : document, writable : true }, 
       window : { value : window, writable :true },
   });
   return res;
}

exports =  dom;
// vim: ft=javascript: