mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-01-22 11:33:03 +00:00
113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
const { Class } = require("../core/heritage");
|
|
const { extend } = require("../util/object");
|
|
const { memoize, method, identity } = require("../lang/functional");
|
|
|
|
const serializeCategory = ({type}) => ({ category: `reader/${type}()` });
|
|
|
|
const Reader = Class({
|
|
initialize() {
|
|
this.id = `reader/${this.type}()`
|
|
},
|
|
toJSON() {
|
|
return serializeCategory(this);
|
|
}
|
|
});
|
|
|
|
|
|
const MediaTypeReader = Class({ extends: Reader, type: "MediaType" });
|
|
exports.MediaType = MediaTypeReader;
|
|
|
|
const LinkURLReader = Class({ extends: Reader, type: "LinkURL" });
|
|
exports.LinkURL = LinkURLReader;
|
|
|
|
const SelectionReader = Class({ extends: Reader, type: "Selection" });
|
|
exports.Selection = SelectionReader;
|
|
|
|
const isPageReader = Class({ extends: Reader, type: "isPage" });
|
|
exports.isPage = isPageReader;
|
|
|
|
const isFrameReader = Class({ extends: Reader, type: "isFrame" });
|
|
exports.isFrame = isFrameReader;
|
|
|
|
const isEditable = Class({ extends: Reader, type: "isEditable"});
|
|
exports.isEditable = isEditable;
|
|
|
|
|
|
|
|
const ParameterizedReader = Class({
|
|
extends: Reader,
|
|
readParameter: function(value) {
|
|
return value;
|
|
},
|
|
toJSON: function() {
|
|
var json = serializeCategory(this);
|
|
json[this.parameter] = this[this.parameter];
|
|
return json;
|
|
},
|
|
initialize(...params) {
|
|
if (params.length) {
|
|
this[this.parameter] = this.readParameter(...params);
|
|
}
|
|
this.id = `reader/${this.type}(${JSON.stringify(this[this.parameter])})`;
|
|
}
|
|
});
|
|
exports.ParameterizedReader = ParameterizedReader;
|
|
|
|
|
|
const QueryReader = Class({
|
|
extends: ParameterizedReader,
|
|
type: "Query",
|
|
parameter: "path"
|
|
});
|
|
exports.Query = QueryReader;
|
|
|
|
|
|
const AttributeReader = Class({
|
|
extends: ParameterizedReader,
|
|
type: "Attribute",
|
|
parameter: "name"
|
|
});
|
|
exports.Attribute = AttributeReader;
|
|
|
|
const SrcURLReader = Class({
|
|
extends: AttributeReader,
|
|
name: "src",
|
|
});
|
|
exports.SrcURL = SrcURLReader;
|
|
|
|
const PageURLReader = Class({
|
|
extends: QueryReader,
|
|
path: "ownerDocument.URL",
|
|
});
|
|
exports.PageURL = PageURLReader;
|
|
|
|
const SelectorMatchReader = Class({
|
|
extends: ParameterizedReader,
|
|
type: "SelectorMatch",
|
|
parameter: "selector"
|
|
});
|
|
exports.SelectorMatch = SelectorMatchReader;
|
|
|
|
const extractors = new WeakMap();
|
|
extractors.id = 0;
|
|
|
|
|
|
var Extractor = Class({
|
|
extends: ParameterizedReader,
|
|
type: "Extractor",
|
|
parameter: "source",
|
|
initialize: function(f) {
|
|
this[this.parameter] = String(f);
|
|
if (!extractors.has(f)) {
|
|
extractors.id = extractors.id + 1;
|
|
extractors.set(f, extractors.id);
|
|
}
|
|
|
|
this.id = `reader/${this.type}.for(${extractors.get(f)})`
|
|
}
|
|
});
|
|
exports.Extractor = Extractor;
|