diff --git a/youtube_dl/jsinterp/jsbuilt_ins.py b/youtube_dl/jsinterp/jsbuilt_ins.py new file mode 100644 index 000000000..c5aac82fc --- /dev/null +++ b/youtube_dl/jsinterp/jsbuilt_ins.py @@ -0,0 +1,60 @@ +from __future__ import unicode_literals + + +class JSBase(object): + def __init__(self, cls=None): + if cls is None: + cls = self.__class__ + + if cls is JSBase: + self.prototype = {} + else: + super(cls, self).__init__(cls.__bases__[0]) + self.prototype.update(cls.prototype) + + def get_proto_prop(self, prop): + return self.prototype[prop](self) + + +class JSObject(JSBase): + def __init__(self, value=None): + super(JSObject, self).__init__() + self.value = value + self.props = {} + + @staticmethod + def get_prototype_of(o): + return 'prototype' + + def has_own_prop(self): + return 'object has own prop' + + def to_string(self): + return 'object to string' + + prototype = {'hasOwnProperty': has_own_prop, 'toLocaleString': to_string} + props = {'prototype ': prototype, 'getPrototypeOf': get_prototype_of} + + +class JSArray(JSObject): + + def __init__(self, length=0): + super(JSArray, self).__init__() + self.value = [] + self.props = {'length': length} + + @staticmethod + def is_array(arg): + return 'is array' + + def concat(self): + return 'concat' + + def join(self): + return 'join' + + def to_string(self): + return 'array to string' + + prototype = {'concat': concat, 'join': join, 'toLocaleString': to_string} + props = {'prototype ': prototype, 'isArray': is_array, 'length': 1}