From bb7b401d297dca265319f01c69f748989829dba7 Mon Sep 17 00:00:00 2001 From: Roeland Salij Date: Wed, 6 Apr 2016 17:10:06 +0200 Subject: [PATCH] Fixed typo --- .jshintrc | 3 +- Gruntfile.js | 2 +- package.json | 9 +- src/DynamicImage/widget/DynamicImage.js | 8 +- src/DynamicImage/widget/MobileDynamicImage.js | 196 +----------------- test/widgets/DynamicImage.mpk | Bin 34385 -> 32217 bytes 6 files changed, 15 insertions(+), 203 deletions(-) diff --git a/.jshintrc b/.jshintrc index f73b569..2714f03 100644 --- a/.jshintrc +++ b/.jshintrc @@ -9,8 +9,7 @@ "undef" : true, "globals" : { "mendix" : false, - "mx" : false, - "logger" : false + "mx" : false }, // Relaxing diff --git a/Gruntfile.js b/Gruntfile.js index c12ddb9..b5e38a0 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,4 @@ -// Generated on 2016-02-09 using generator-mendix 1.3.3 :: git+https://github.com/mendix/generator-mendix.git +// Generated on 2016-04-06 using generator-mendix 1.3.3 :: git+https://github.com/mendix/generator-mendix.git /*jshint -W069*/ /*global module*/ "use strict"; diff --git a/package.json b/package.json index 2abecde..ed473bd 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,12 @@ { "name": "DynamicImage", - "version": "4.2.0", + "version": "4.3.0", "description": "", "license": "", "author": "", "private": true, - "dependencies": {}, + "dependencies": { + }, "devDependencies": { "grunt": "0.4.5", "grunt-contrib-clean": "^0.6.0", @@ -25,9 +26,9 @@ "generatorVersion": "1.3.3", "paths": { "testProjectFolder": "./test/", - "testProjectFileName": "DynamicImageWidget.mpr" + "testProjectFileName": "Test.mpr" }, "scripts": { "test": "grunt test" } -} \ No newline at end of file +} diff --git a/src/DynamicImage/widget/DynamicImage.js b/src/DynamicImage/widget/DynamicImage.js index 989b80b..5d68610 100644 --- a/src/DynamicImage/widget/DynamicImage.js +++ b/src/DynamicImage/widget/DynamicImage.js @@ -32,10 +32,10 @@ define([ } else { mx.data.get({ guid : this.mxcontext.getTrackId(), - callback : function(obj) { + callback : lang.hitch(this, function(obj) { this._contextObj = obj; this._updateRendering(callback); - } + }) }, this); } }, @@ -70,7 +70,7 @@ define([ targetObj = this._contextObj.get(this.imageattr.split("/")[0]); if (/\d+/.test(targetObj)) { //guid only loaded = true; - this.setToDefaultImage(); + this._setToDefaultImage(); mx.data.get({ //fetch the object first guid : targetObj, nocache : true, @@ -83,7 +83,7 @@ define([ } } } - this.connect(this.imageNode, "onclick", this.execclick); + this.connect(this.imageNode, "onclick", this._execClick); } catch (err) { console.warn(this.id +".setDataobject: error while loading image" + err); loaded = false; diff --git a/src/DynamicImage/widget/MobileDynamicImage.js b/src/DynamicImage/widget/MobileDynamicImage.js index 816bbd6..a2ca5ad 100644 --- a/src/DynamicImage/widget/MobileDynamicImage.js +++ b/src/DynamicImage/widget/MobileDynamicImage.js @@ -1,200 +1,12 @@ define([ - "dojo/_base/declare", "mxui/widget/_WidgetBase", "dijit/_TemplatedMixin", - "mxui/dom", "dojo/dom", "dojo/query", "dojo/dom-prop", "dojo/dom-geometry", "dojo/dom-class", "dojo/dom-style", "dojo/dom-construct", "dojo/_base/array", "dojo/_base/lang", "dojo/text", "dojo/html", "dojo/_base/event", - "dojo/text!DynamicImage/widget/template/DynamicImage.html" -], function (declare, _WidgetBase, _TemplatedMixin, dom, dojoDom, domQuery, domProp, domGeom, domClass, domStyle, domConstruct, dojoArray, lang, text, html, event, widgetTemplate) { + "dojo/_base/declare", "DynamicImage/widget/DynamicImage" +], function (declare, DynamicImage) { "use strict"; // Declare widget"s prototype. - return declare("DynamicImage.widget.MobileDynamicImage", [_WidgetBase, _TemplatedMixin], { - - // _TemplatedMixin will create our dom node using this HTML template. - templateString: widgetTemplate, - - _handles: null, - _contextObj: null, - _contexContext: null, - - // dojo.declare.constructor is called to construct the widget instance. Implement to initialize non-primitive properties. - constructor: function () { - this._handles = []; - }, - - postCreate: function () { - logger.debug(this.id + ".postCreate"); - this._updateRendering(); - }, - - update: function (obj, callback) { - logger.debug(this.id + ".update"); - this._contextObj = obj; - if (obj !== null) { - this._resetSubscriptions(); - this._updateRendering(callback); - } else { - mx.data.get({ - guid : this.mxcontext.getTrackId(), - callback : function(obj) { - this._contextObj = obj; - this._updateRendering(callback); - } - }, this); - } - }, - - uninitialize: function () { - logger.debug(this.id + ".uninitialize"); - try { - if (this._handles) { - this._handles.forEach(function (handle, i) { - this.unsubscribe(handle); - }); - this._handles = []; - } - } catch (e) { - console.warn("Unitialize of Dynamic Image Viewer failed"); - } - }, - - // Rerender the interface. - _updateRendering: function (callback) { - logger.debug(this.id + "._updateRendering"); - - var targetObj, - loaded = false; - - if (this._contextObj !== null) { - try { - if (this.imageattr !== "") { - if (this.imageattr.indexOf("/") === -1) { - loaded = this._loadImagefromUrl(this._contextObj.get(this.imageattr)); - } else { - targetObj = this._contextObj.get(this.imageattr.split("/")[0]); - if (/\d+/.test(targetObj)) { //guid only - loaded = true; - this.setToDefaultImage(); - mx.data.get({ //fetch the object first - guid : targetObj, - nocache : true, - callback : function(obj) { - this._loadImagefromUrl(obj.get(this.imageattr.split("/")[2])); - } - }, this); - } else if (targetObj !== null) { - loaded = this._loadImagefromUrl(targetObj.attributes[ this.imageattr.split("/")[2]].value); - } - } - } - this.connect(this.imageNode, "onclick", this.execclick); - } catch (err) { - console.warn(this.id +".setDataobject: error while loading image" + err); - loaded = false; - } - } else { - console.warn(this.id + ".setDataobject: received null object"); - } - - if (!loaded) { - this._setToDefaultImage(); - } - - if (callback) - callback(); - }, - - _loadImagefromUrl : function(url) { - logger.debug(this.id + "._loadImagefromUrl"); - - if (url !== "" && typeof url !== "undefined" && url !== null) { - this.imageNode.onerror = lang.hitch(this, this._setToDefaultImage); - this.imageNode.onload = lang.hitch(this, this._resizeImage); - this.imageNode.src = this.pathprefix + url + this.pathpostfix; - if (this.tooltipattr) { - this.imageNode.title = this._contextObj.get(this.tooltipattr); - } - return true; - } - return false; - }, - - _resizeImage: function() { - logger.debug(this.id + "._resizeImage"); - var origw, origh, factorw, factorh, factor; - origw = this.imageNode.width; - origh = this.imageNode.height; - if (origw > 0 && origh > 0) {//only apply if an valid image has been loaded - factorw = this.width / origw; - factorh = this.height / origh; - factor = (factorw < factorh ? factorw : factorh); - if (factor < 1) {//check prevents upscaling - domStyle.add(this.imageNode, "width", (factor * origw) + "px"); - domStyle.add(this.imageNode, "height", (factor * origh) + "px"); - } - } - }, - - _setToDefaultImage : function() { - logger.debug(this.id + "._setToDefaultImage"); - if (this.imageNode) { - this.imageNode.onerror = null; //do not catch exceptions when loading default - this.imageNode.src = this.defaultImage; - } - }, - - _execClick : function(index) { - if (this._contextObj !== null && this.imageNode) { - if (this.clickmicroflow !== "") { - mx.data.action({ - params : { - applyto : "selection", - actionname : this.clickmicroflow, - guids : [this._contextObj.getGuid()] - }, - store: { - caller: this.mxform - }, - callback : function(obj) { - }, - error : function(error) { - console.error(this.id + "error: XAS error executing microflow"); - } - }); - } - if (this.linkattr !== "") { - var url = this._contextObj.get(this.linkattr); - if (url !== "" && url !== undefined && url !== null) { - window.open(url, this.linktarget); - } - } - } - }, - - // Reset subscriptions. - _resetSubscriptions: function () { - logger.debug(this.id + "._resetSubscriptions"); - var _objectHandle = null; - - // Release handles on previous object, if any. - if (this._handles) { - this._handles.forEach(function (handle, i) { - mx.data.unsubscribe(handle); - }); - this._handles = []; - } - - // When a mendix object exists create subscribtions. - if (this._contextObj) { - _objectHandle = this.subscribe({ - guid: this._contextObj.getGuid(), - callback: lang.hitch(this, function (guid) { - this._updateRendering(); - }) - }); - this._handles = [_objectHandle]; - } - } - }); + return declare("DynamicImage.widget.MobileDynamicImage", [DynamicImage]); + }); require(["DynamicImage/widget/MobileDynamicImage"], function () { "use strict"; diff --git a/test/widgets/DynamicImage.mpk b/test/widgets/DynamicImage.mpk index 0db054feb7898cc6ee7fc300a1d010b00763c236..d4d0b97524e43663822669e4ff53fb12fa14ccb1 100644 GIT binary patch delta 3326 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 F{U4I0`ilSn delta 5624 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 m{a-L~2ngh1ZR=v~XwT#4`bb9u7w_6ne)VO