1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var React = require("react");
|
4 | var ReactDom = require("react-dom");
|
5 | var fp_1 = require("lodash/fp");
|
6 | var Pvjs_1 = require("./Pvjs");
|
7 | (function (window, $) {
|
8 | ("use strict");
|
9 | var Utils = {
|
10 | /**
|
11 | * Checks if an object is a DOM element
|
12 | *
|
13 | * @param {object} o HTML element or String
|
14 | * @return {Boolean} returns true if object is a DOM element
|
15 | */
|
16 | isElement: function (o) {
|
17 | return typeof HTMLElement === "object"
|
18 | ? o instanceof HTMLElement ||
|
19 | o instanceof SVGElement ||
|
20 | o instanceof SVGSVGElement //DOM2
|
21 | : o &&
|
22 | typeof o === "object" &&
|
23 | o !== null &&
|
24 | o.nodeType === 1 &&
|
25 | typeof o.nodeName === "string";
|
26 | },
|
27 | proxy: function proxy(fn, context) {
|
28 | return function () {
|
29 | fn.apply(context, arguments);
|
30 | };
|
31 | }
|
32 | };
|
33 | var Renderer = {
|
34 | destroyRender: function (pvjs) {
|
35 | var options = pvjs.options;
|
36 | console.log("TODO: destroyRender");
|
37 | },
|
38 | render: function (pvjs) {
|
39 | var element = pvjs.element, options = pvjs.options;
|
40 | var pvjson = options.pvjson;
|
41 | if (element.data === undefined) {
|
42 | element.data = {};
|
43 | }
|
44 | var data;
|
45 | if (element.data.pvjs === undefined) {
|
46 | element.data.pvjs = data = ReactDom.render(React.createElement(Pvjs_1.Pvjs, { pvjson: pvjson }), pvjs["$element"][0][0]);
|
47 | }
|
48 | else {
|
49 | data = element.data.pvjs;
|
50 | }
|
51 | }
|
52 | };
|
53 | /**
|
54 | * PvjsJQuery constructor
|
55 | *
|
56 | * @param {object} element Dom element
|
57 | * @param {object} options
|
58 | */
|
59 | var PvjsJQuery = function (element, options) {
|
60 | this.init(element, options);
|
61 | };
|
62 | var instanceCounter = 0, optionsDefault = {
|
63 | fitToContainer: true,
|
64 | uri: null,
|
65 | fileType: "",
|
66 | pvjson: null,
|
67 | selector: null // selector instance
|
68 | };
|
69 | /**
|
70 | * PvjsJQuery initialisation
|
71 | *
|
72 | * @param {object} element Dom element
|
73 | * @param {object} options
|
74 | */
|
75 | PvjsJQuery.prototype.init = function (element, options) {
|
76 | // select and empty the element
|
77 | this.$element = $(element);
|
78 | this.$element.empty();
|
79 | // Clone and fill options
|
80 | this.options = fp_1.cloneDeep(optionsDefault);
|
81 | this.options = fp_1.assign(this.options, options);
|
82 | // Make this instance unique
|
83 | this.instanceId = ++instanceCounter;
|
84 | // Init events object
|
85 | this.events = {};
|
86 | this.initContainer();
|
87 | };
|
88 | /**
|
89 | * Creates DOM container and parses its sizes.
|
90 | * Adds loading state to container.
|
91 | * Adds hook for loaded event to remove loading state
|
92 | */
|
93 | PvjsJQuery.prototype.initContainer = function () {
|
94 | var pvjs = this;
|
95 | // Get container sizes
|
96 | var boundingRect = this.$element[0][0].getBoundingClientRect();
|
97 | this.element_width = +boundingRect.width; // TODO take in account paddings, margins and border
|
98 | this.element_height = +boundingRect.height; // TODO take in account paddings, margins and border
|
99 | };
|
100 | /**
|
101 | * Init and render
|
102 | */
|
103 | PvjsJQuery.prototype.render = function () {
|
104 | var pvjs = this;
|
105 | Renderer.render(pvjs);
|
106 | // Listen for renderer errors
|
107 | this.on("error.renderer", function () {
|
108 | Renderer.destroyRender(pvjs);
|
109 | });
|
110 | };
|
111 | PvjsJQuery.prototype.destroy = function () {
|
112 | // Send destroy message
|
113 | this.trigger("destroy.pvjs", { message: "User requested pvjs destroy" }, false);
|
114 | // Destroy renderer
|
115 | Renderer.destroyRender(this);
|
116 | // Off all events
|
117 | for (var e in this.events) {
|
118 | this.off(e);
|
119 | }
|
120 | // Clean data
|
121 | this.$element[0][0].data = undefined;
|
122 | if ($) {
|
123 | $(this.$element[0][0]).removeData("pvjs");
|
124 | }
|
125 | // Clean HTML
|
126 | // jQuery
|
127 | $(this.$element[0][0]).empty();
|
128 | };
|
129 | /**
|
130 | * Returns an instance for public usage
|
131 | * @return {object}
|
132 | */
|
133 | PvjsJQuery.prototype.getPublicInstance = function () {
|
134 | var that = this;
|
135 | if (this.publicInstance === undefined) {
|
136 | // Initialise public instance
|
137 | this.publicInstance = {
|
138 | instanceId: this.instanceId,
|
139 | $element: this.$element,
|
140 | destroy: Utils.proxy(this.destroy, this),
|
141 | on: Utils.proxy(this.on, this),
|
142 | off: Utils.proxy(this.off, this),
|
143 | trigger: Utils.proxy(this.trigger, this),
|
144 | render: Utils.proxy(this.render, this),
|
145 | pan: function (point) {
|
146 | if (that.panZoom) {
|
147 | that.panZoom.pan(point);
|
148 | }
|
149 | },
|
150 | panBy: function (point) {
|
151 | if (that.panZoom) {
|
152 | that.panZoom.panBy(point);
|
153 | }
|
154 | },
|
155 | getPan: function () {
|
156 | return that.panZoom.getPan();
|
157 | },
|
158 | zoom: function (scale) {
|
159 | if (that.panZoom) {
|
160 | that.panZoom.zoom(scale);
|
161 | }
|
162 | },
|
163 | zoomBy: function (scale) {
|
164 | if (that.panZoom) {
|
165 | that.panZoom.zoomBy(scale);
|
166 | }
|
167 | },
|
168 | zoomAtPoint: function (scale, point) {
|
169 | if (that.panZoom) {
|
170 | that.panZoom.zoomAtPoint(scale, point);
|
171 | }
|
172 | },
|
173 | zoomAtPointBy: function (scale, point) {
|
174 | if (that.panZoom) {
|
175 | that.panZoom.zoomAtPointBy(scale, point);
|
176 | }
|
177 | },
|
178 | getZoom: function () {
|
179 | return that.panZoom.getZoom();
|
180 | },
|
181 | getOptions: function () {
|
182 | return fp_1.cloneDeep(that.options);
|
183 | }
|
184 | };
|
185 | }
|
186 | return this.publicInstance;
|
187 | };
|
188 | /**
|
189 | * Register an event listener
|
190 | *
|
191 | * @param {string} topic
|
192 | * @param {Function} callback
|
193 | */
|
194 | PvjsJQuery.prototype.on = function (topic, callback) {
|
195 | var namespace = null, eventName = topic;
|
196 | if (topic.indexOf(".") !== -1) {
|
197 | var pieces = topic.split(".");
|
198 | eventName = pieces[0];
|
199 | namespace = pieces[1];
|
200 | }
|
201 | if (!this.events.hasOwnProperty(eventName)) {
|
202 | this.events[eventName] = [];
|
203 | }
|
204 | this.events[eventName].push({
|
205 | callback: callback,
|
206 | namespace: namespace
|
207 | });
|
208 | };
|
209 | /**
|
210 | * Removes an event listener
|
211 | * Returns true if listener was removed
|
212 | *
|
213 | * @param {string} topic
|
214 | * @param {Function} callback
|
215 | * @return {bool}
|
216 | */
|
217 | PvjsJQuery.prototype.off = function (topic, callback) {
|
218 | var namespace = null, eventName = topic, flagRemove = true;
|
219 | callback = callback || null;
|
220 | if (topic.indexOf(".") !== -1) {
|
221 | var pieces = topic.split(".");
|
222 | eventName = pieces[0];
|
223 | namespace = pieces[1];
|
224 | }
|
225 | // Check if such an event is registered
|
226 | if (!this.events.hasOwnProperty(eventName)) {
|
227 | return false;
|
228 | }
|
229 | var queue = this.events[topic];
|
230 | for (var i = queue.length - 1; i >= 0; i--) {
|
231 | flagRemove = true;
|
232 | if (namespace && queue[i].namespace !== namespace) {
|
233 | flagRemove = false;
|
234 | }
|
235 | if (callback && queue[i].callback !== callback) {
|
236 | flagRemove = false;
|
237 | }
|
238 | if (flagRemove) {
|
239 | queue.splice(i, 1);
|
240 | }
|
241 | }
|
242 | return true;
|
243 | };
|
244 | /**
|
245 | * Triggers an event. Async by default.
|
246 | * Returns true if there is at least one listener
|
247 | *
|
248 | * @param {string} topic
|
249 | * @param {object} message
|
250 | * @param {bool} async By default true
|
251 | * @return {bool}
|
252 | */
|
253 | PvjsJQuery.prototype.trigger = function (topic, message, async) {
|
254 | var namespace = null, eventName = topic;
|
255 | if (topic.indexOf(".") !== -1) {
|
256 | var pieces = topic.split(".");
|
257 | eventName = pieces[0];
|
258 | namespace = pieces[1];
|
259 | }
|
260 | if (!this.events.hasOwnProperty(eventName)) {
|
261 | return false;
|
262 | }
|
263 | var queue = this.events[eventName];
|
264 | if (queue.length === 0) {
|
265 | return false;
|
266 | }
|
267 | if (async === undefined) {
|
268 | async = true;
|
269 | }
|
270 | // Use a function as i may change meanwhile
|
271 | var callAsync = function (i) {
|
272 | setTimeout(function () {
|
273 | queue[i].callback(message);
|
274 | }, 0);
|
275 | };
|
276 | for (var i = 0; i < queue.length; i++) {
|
277 | if (namespace && queue[i].namespace && namespace !== queue[i].namespace) {
|
278 | continue;
|
279 | }
|
280 | if (async) {
|
281 | // freeze i
|
282 | callAsync(i);
|
283 | }
|
284 | else {
|
285 | queue[i].callback(message);
|
286 | }
|
287 | }
|
288 | return true;
|
289 | };
|
290 | /**
|
291 | *
|
292 | */
|
293 | if ($) {
|
294 | /**
|
295 | * jQuery plugin entry point. Only if jQuery is defined.
|
296 | * If option is 'get' then returns an array of pvjs public instances.
|
297 | * Otherwise returns an jQuery object to allow chaining.
|
298 | *
|
299 | * @param {string} option
|
300 | * @return {object} array || jQuery object
|
301 | */
|
302 | $.fn.pvjs = function (option) {
|
303 | // Instantiate PvjsJQuery for all elements
|
304 | var $return = this.each(function () {
|
305 | var $this = $(this), data = $this.data("pvjs"), options = typeof option == "object" && option;
|
306 | if (!data) {
|
307 | $this.data("pvjs", new PvjsJQuery(this, options));
|
308 | }
|
309 | });
|
310 | if (option === "get") {
|
311 | // Return an array of PvjsJQuery instances
|
312 | return $.map(this, function (a) {
|
313 | return $(a).data("pvjs").getPublicInstance();
|
314 | });
|
315 | }
|
316 | else {
|
317 | // Return jQuery object
|
318 | return $return;
|
319 | }
|
320 | };
|
321 | }
|
322 | /**
|
323 | * Globally available method
|
324 | * Returns an array of public instances
|
325 | *
|
326 | * @param {string} selector
|
327 | * @param {object} option
|
328 | * @return {array}
|
329 | */
|
330 | window["$pvjs"] = function (selector, option) {
|
331 | var $elements;
|
332 | if (Utils.isElement(selector)) {
|
333 | $elements = [selector];
|
334 | }
|
335 | else {
|
336 | $elements = document.querySelectorAll(selector);
|
337 | }
|
338 | return fp_1.map(function (element) {
|
339 | if (element.data === undefined) {
|
340 | element.data = {};
|
341 | }
|
342 | var data, options = typeof option == "object" ? option : {};
|
343 | if (element.data.pvjs === undefined) {
|
344 | element.data.pvjs = data = new PvjsJQuery(element, options);
|
345 | }
|
346 | else {
|
347 | data = element.data.pvjs;
|
348 | }
|
349 | return data.getPublicInstance();
|
350 | }, $elements);
|
351 | };
|
352 | })(window, window["jQuery"] || null);
|
353 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHZqcy5qcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHZqcy5qcXVlcnkudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQStCO0FBQy9CLG9DQUFzQztBQUN0QyxnQ0FBbUQ7QUFDbkQsK0JBQThCO0FBRTlCLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWYsSUFBSSxLQUFLLEdBQUc7UUFDVjs7Ozs7T0FLRDtRQUNDLFNBQVMsRUFBRSxVQUFTLENBQUM7WUFDbkIsTUFBTSxDQUFDLE9BQU8sV0FBVyxLQUFLLFFBQVE7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDLFlBQVksV0FBVztvQkFDdEIsQ0FBQyxZQUFZLFVBQVU7b0JBQ3ZCLENBQUMsWUFBWSxhQUFhLENBQUMsTUFBTTtnQkFDckMsQ0FBQyxDQUFDLENBQUM7b0JBQ0MsT0FBTyxDQUFDLEtBQUssUUFBUTtvQkFDckIsQ0FBQyxLQUFLLElBQUk7b0JBQ1YsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDO29CQUNoQixPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsT0FBTztZQUMvQixNQUFNLENBQUM7Z0JBQ0wsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7SUFDRixJQUFJLFFBQVEsR0FBRztRQUNiLGFBQWEsRUFBRSxVQUFTLElBQUk7WUFDbEIsSUFBQSxzQkFBTyxDQUFVO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsTUFBTSxFQUFFLFVBQVMsSUFBSTtZQUNYLElBQUEsc0JBQU8sRUFBRSxzQkFBTyxDQUFVO1lBQzFCLElBQUEsdUJBQU0sQ0FBYTtZQUMz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 |
\ | No newline at end of file |