New upstream version 1.15.2+dfsg1
Xavier Guimard
4 years ago
106 | 106 | this.editor = editor; |
107 | 107 | this._initButton(); |
108 | 108 | |
109 | // Filter the html content when it is set and retrieved in the editor. | |
110 | this.removeValueFilterHandles(); | |
111 | this._setValueFilterHandle = aspect.before(this.editor, "setValue", lang.hitch(this, function (html) { | |
112 | return [this._filter(html)]; | |
113 | })); | |
114 | this._getValueFilterHandle = aspect.after(this.editor, "getValue", lang.hitch(this, function (html) { | |
115 | return this._filter(html); | |
116 | })); | |
117 | ||
109 | 118 | this.editor.addKeyHandler(keys.F12, true, true, lang.hitch(this, function(e){ |
110 | 119 | // Move the focus before switching |
111 | 120 | // It'll focus back. Hiding a focused |
151 | 160 | return cmd.toLowerCase() === "viewsource"; |
152 | 161 | }; |
153 | 162 | this.editor.onDisplayChanged(); |
154 | html = ed.get("value"); | |
155 | html = this._filter(html); | |
156 | ed.set("value", html); | |
157 | 163 | array.forEach(edPlugins, function(p){ |
158 | 164 | // Turn off any plugins not controlled by queryCommandenabled. |
159 | 165 | if(p && !(p instanceof ViewSource) && p.isInstanceOf(_Plugin)){ |
169 | 175 | }; |
170 | 176 | } |
171 | 177 | |
172 | this.sourceArea.value = html; | |
178 | this.sourceArea.value = ed.get("value"); | |
173 | 179 | |
174 | 180 | // Since neither iframe nor textarea have margin, border, or padding, |
175 | 181 | // just set sizes equal. |
234 | 240 | |
235 | 241 | this._setListener = aspect.after(this.editor, "setValue", lang.hitch(this, function(htmlTxt){ |
236 | 242 | htmlTxt = htmlTxt || ""; |
237 | htmlTxt = this._filter(htmlTxt); | |
243 | // htmlTxt was filtered in setValue before aspect. | |
238 | 244 | this.sourceArea.value = htmlTxt; |
239 | 245 | }), true); |
240 | 246 | }else{ |
261 | 267 | ed.queryCommandEnabled = ed._sourceQueryCommandEnabled; |
262 | 268 | if(!this._readOnly){ |
263 | 269 | html = this.sourceArea.value; |
264 | html = this._filter(html); | |
265 | 270 | ed.beginEditing(); |
271 | // html will be filtered in setValue aspect. | |
266 | 272 | ed.set("value", html); |
267 | 273 | ed.endEditing(); |
268 | 274 | } |
522 | 528 | return html; |
523 | 529 | }, |
524 | 530 | |
531 | removeValueFilterHandles: function () { | |
532 | if (this._setValueFilterHandle) { | |
533 | this._setValueFilterHandle.remove(); | |
534 | delete this._setValueFilterHandle; | |
535 | } | |
536 | if (this._getValueFilterHandle) { | |
537 | this._getValueFilterHandle.remove(); | |
538 | delete this._getValueFilterHandle; | |
539 | } | |
540 | }, | |
541 | ||
525 | 542 | setSourceAreaCaret: function(){ |
526 | 543 | // summary: |
527 | 544 | // Internal function to set the caret in the sourceArea |
556 | 573 | this._setListener.remove(); |
557 | 574 | delete this._setListener; |
558 | 575 | } |
576 | this.removeValueFilterHandles(); | |
559 | 577 | this.inherited(arguments); |
560 | 578 | } |
561 | 579 | }); |
14 | 14 | "url": "https://github.com/dojo/dijit.git" |
15 | 15 | }, |
16 | 16 | "dependencies": { |
17 | "dojo": "1.15.0" | |
17 | "dojo": "1.15.2" | |
18 | 18 | }, |
19 | 19 | "devDependencies": { |
20 | 20 | } |
0 | 0 | { |
1 | 1 | "name": "dijit", |
2 | "version": "1.15.0", | |
2 | "version": "1.15.2", | |
3 | 3 | "directories": { |
4 | 4 | "lib": "." |
5 | 5 | }, |
6 | 6 | "main": "main", |
7 | 7 | "dependencies": { |
8 | "dojo": "1.15.0" | |
8 | "dojo": "1.15.2" | |
9 | 9 | }, |
10 | 10 | "description": "Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible user experience.", |
11 | 11 | "license" : "BSD-3-Clause OR AFL-2.1", |
8 | 8 | <script type="text/javascript"> |
9 | 9 | require([ |
10 | 10 | "dojo/parser", |
11 | "dijit/registry", | |
11 | 12 | "dijit/Editor", |
12 | 13 | "dijit/_editor/plugins/ViewSource", |
13 | 14 | "dijit/_editor/plugins/FullScreen", |
14 | 15 | "dojo/domReady!" |
15 | ], function(parser){ | |
16 | ], function(parser, registry){ | |
16 | 17 | parser.parse(); |
18 | ||
19 | var editor = registry.byId("editor7"); | |
20 | editor.set("value", "<h1>ViewSource Plugin with onmouseover in content set via setValue.</h1>" + | |
21 | "<p onmouseover=\"alert('Mouse over foobar');\">foobar</p>" + | |
22 | "<h2>Things to test:</h2>\n" + | |
23 | "<ol>" + | |
24 | "<li>Move mouse over \"foobar\" and make sure alert is not displayed.</li>" + | |
25 | "</ol>"); | |
17 | 26 | }); |
18 | 27 | </script> |
19 | 28 | </head> |
146 | 155 | </div> |
147 | 156 | <br> |
148 | 157 | <br> |
158 | <div> | |
159 | <div id="editor6" data-dojo-type="dijit/Editor" | |
160 | data-dojo-props='"aria-label":"editor3",extraPlugins:["fullScreen", "viewSource"], | |
161 | style:"background-color: white; width: 800px;", height:"300px" '> | |
162 | <h1>ViewSource Plugin with onmouseover in content.</h1> | |
163 | <p onmouseover="alert('Mouse over foobar');">foobar</p> | |
164 | ||
165 | <h2>Things to test:</h2> | |
166 | <ol> | |
167 | <li>Move mouse over "foobar" and make sure alert is not displayed.</li> | |
168 | </ol> | |
169 | </div> | |
170 | </div> | |
171 | <br> | |
172 | <br> | |
173 | <div> | |
174 | <div id="editor7" data-dojo-type="dijit/Editor" | |
175 | data-dojo-props='"aria-label":"editor3",extraPlugins:["fullScreen", "viewSource"], | |
176 | style:"background-color: white; width: 800px;", height:"300px" '> | |
177 | </div> | |
178 | </div> | |
179 | <br> | |
180 | <br> | |
149 | 181 | <div>Content after the editors.</div> |
150 | 182 | </body> |
151 | 183 | </html> |
0 | 0 | { |
1 | 1 | "name": "dijit-themes", |
2 | "version": "1.15.0", | |
2 | "version": "1.15.2", | |
3 | 3 | "description": "Dojo 1.x modern themes", |
4 | 4 | "license" : "BSD-3-Clause OR AFL-2.1", |
5 | 5 | "bugs": "http://bugs.dojotoolkit.org/", |
11 | 11 | }, |
12 | 12 | "dojoBuild": "themes.profile.js", |
13 | 13 | "peerDependencies": { |
14 | "dojo": "1.15.0", | |
15 | "dijit": "1.15.0" | |
14 | "dojo": "1.15.2", | |
15 | "dijit": "1.15.2" | |
16 | 16 | }, |
17 | 17 | "devDependencies": { |
18 | 18 | "grunt": "^0.4", |
78 | 78 | // define debug for console messages during dev instead of console.log |
79 | 79 | // (node's heavy async makes console.log confusing sometimes) |
80 | 80 | var util = require("util"); |
81 | util.debug(util.inspect(item)); | |
81 | util.debuglog(util.inspect(item)); | |
82 | 82 | }, |
83 | 83 | |
84 | 84 | eval: function(__text, __urlHint){ |
91 | 91 | // - flag: String: Descriptor flag. If total version is "1.2.0beta1", will be "beta1" |
92 | 92 | // - revision: Number: The Git rev from which dojo was pulled |
93 | 93 | |
94 | major: 1, minor: 15, patch: 0, flag: "", | |
94 | major: 1, minor: 15, patch: 2, flag: "", | |
95 | 95 | revision: rev ? rev[0] : NaN, |
96 | 96 | toString: function(){ |
97 | 97 | var v = dojo.version; |
410 | 410 | // returns: Object |
411 | 411 | |
412 | 412 | doc = doc || win.doc; |
413 | var node = win.doc.parentWindow || win.doc.defaultView; // use UI window, not dojo.global window. TODO: use dojo/window::get() except for circular dependency problem | |
413 | var node = doc.parentWindow || doc.defaultView; // use UI window, not dojo.global window. TODO: use dojo/window::get() except for circular dependency problem | |
414 | 414 | return "pageXOffset" in node ? {x: node.pageXOffset, y: node.pageYOffset } : |
415 | 415 | (node = has("quirks") ? win.body(doc) : doc.documentElement) && |
416 | 416 | {x: geom.fixIeBiDiScrollLeft(node.scrollLeft || 0, doc), y: node.scrollTop || 0 }; |
0 | 0 | { |
1 | 1 | "name": "dojo", |
2 | "version": "1.15.0", | |
2 | "version": "1.15.2", | |
3 | 3 | "directories": { |
4 | 4 | "lib": "." |
5 | 5 | }, |
10 | 10 | "jsgi-node": "0.3.1", |
11 | 11 | "formidable": "1.0.17", |
12 | 12 | "sinon": "1.12.2", |
13 | "dojo": "1.15.0" | |
13 | "dojo": "1.15.2" | |
14 | 14 | }, |
15 | 15 | "main": "main", |
16 | 16 | "scripts": { |
17 | 17 | return has('native-blob') && value instanceof Blob |
18 | 18 | } |
19 | 19 | |
20 | function isFormElement(value) { | |
21 | if(typeof HTMLFormElement !== 'undefined') { //all other | |
22 | return value instanceof HTMLFormElement; | |
23 | } else { //IE<=7 | |
24 | value.tagName === "FORM" | |
25 | } | |
20 | function isElement(value) { | |
21 | if(typeof Element !== 'undefined') { //all other | |
22 | return value instanceof Element; | |
23 | } | |
24 | ||
25 | //IE<=7 | |
26 | return value.nodeType === 1; | |
26 | 27 | } |
27 | 28 | |
28 | 29 | function isFormData(value) { |
33 | 34 | return value && |
34 | 35 | typeof value === 'object' && |
35 | 36 | !isFormData(value) && |
36 | !isFormElement(value) && | |
37 | !isElement(value) && | |
37 | 38 | !isBlob(value) && |
38 | 39 | !isArrayBuffer(value) |
39 | 40 | } |
97 | 97 | } else { |
98 | 98 | this.skip('Do not run test if Blob not available.'); |
99 | 99 | } |
100 | }, | |
101 | ||
102 | 'deepCopy with Element, given Element is defined': function(){ | |
103 | if (typeof Element !== 'undefined') { | |
104 | var element = document.createElement('span'); | |
105 | var object1 = { | |
106 | apple: 0, | |
107 | banana: { | |
108 | weight: 52, | |
109 | price: 100, | |
110 | code: "B12345", | |
111 | purchased: new Date(2016, 0, 1) | |
112 | }, | |
113 | cherry: 97 | |
114 | }; | |
115 | var object2 = { | |
116 | banana: { | |
117 | price: 200, | |
118 | code: "B98765", | |
119 | purchased: new Date(2017, 0, 1) | |
120 | }, | |
121 | element: element, | |
122 | durian: 100 | |
123 | }; | |
124 | util.deepCopy(object1, object2); | |
125 | assert.strictEqual(object1.banana.weight, 52); | |
126 | assert.strictEqual(object1.banana.price, 200); | |
127 | assert.strictEqual(object1.banana.code, "B98765"); | |
128 | assert.strictEqual(object1.element, element); | |
129 | assert.equal(object1.banana.purchased.getTime(), new Date(2017, 0, 1).getTime()); | |
130 | } else { | |
131 | this.skip('Do not run test if Element not available.'); | |
132 | } | |
133 | }, | |
134 | ||
135 | 'deepCopy with Element, given Element is not defined': function(){ | |
136 | if (typeof Element !== 'undefined') { | |
137 | this.skip('Do not run test if Element is available.'); | |
138 | } | |
139 | ||
140 | var element = {nodeType: 1, value: 'Orange'}; | |
141 | var object1 = { | |
142 | apple: 0, | |
143 | banana: { | |
144 | weight: 52, | |
145 | price: 100, | |
146 | code: "B12345", | |
147 | purchased: new Date(2016, 0, 1) | |
148 | }, | |
149 | cherry: 97 | |
150 | }; | |
151 | var object2 = { | |
152 | banana: { | |
153 | price: 200, | |
154 | code: "B98765", | |
155 | purchased: new Date(2017, 0, 1) | |
156 | }, | |
157 | element: element, | |
158 | durian: 100 | |
159 | }; | |
160 | util.deepCopy(object1, object2); | |
161 | assert.strictEqual(object1.banana.weight, 52); | |
162 | assert.strictEqual(object1.banana.price, 200); | |
163 | assert.strictEqual(object1.banana.code, "B98765"); | |
164 | assert.strictEqual(object1.element, element); | |
165 | assert.equal(object1.banana.purchased.getTime(), new Date(2017, 0, 1).getTime()); | |
100 | 166 | } |
101 | 167 | }); |
102 | 168 | }); |
14 | 14 | "url": "https://github.com/dojo/dojox.git" |
15 | 15 | }, |
16 | 16 | "dependencies": { |
17 | "dojo": "1.15.0", | |
18 | "dijit": "1.15.0" | |
17 | "dojo": "1.15.2", | |
18 | "dijit": "1.15.2" | |
19 | 19 | }, |
20 | 20 | "devDependencies": { |
21 | 21 | } |
0 | 0 | define(["../main", "dojo/_base/lang", "dojo/_base/array","dojo/_base/declare", "dojo/dom-style", |
1 | 1 | "dojo/dom", "dojo/dom-geometry", "dojo/dom-construct","dojo/_base/Color", "dojo/sniff", |
2 | "./Element", "./SimpleTheme", "./Series", "./axis2d/common", "dojox/gfx/shape", | |
2 | "./Element", "./SimpleTheme", "./Series", "./axis2d/common", "./plot2d/common", "dojox/gfx/shape", | |
3 | 3 | "dojox/gfx", "dojo/has!dojo-bidi?./bidi/Chart", "dojox/lang/functional", "dojox/lang/functional/fold", "dojox/lang/functional/reversed"], |
4 | 4 | function(dojox, lang, arr, declare, domStyle, |
5 | 5 | dom, domGeom, domConstruct, Color, has, |
6 | Element, SimpleTheme, Series, common, shape, | |
6 | Element, SimpleTheme, Series, common, plot2dCommon, shape, | |
7 | 7 | g, BidiChart, func){ |
8 | 8 | /*===== |
9 | 9 | var __ChartCtorArgs = { |
43 | 43 | =====*/ |
44 | 44 | |
45 | 45 | var dc = lang.getObject("charting", true, dojox), |
46 | clear = func.lambda("item.clear()"), | |
47 | purge = func.lambda("item.purgeGroup()"), | |
48 | destroy = func.lambda("item.destroy()"), | |
49 | makeClean = func.lambda("item.dirty = false"), | |
50 | makeDirty = func.lambda("item.dirty = true"), | |
51 | getName = func.lambda("item.name"), | |
52 | 46 | defaultMargins = {l: 10, t: 10, r: 10, b: 10}; |
47 | ||
48 | function clear (item) { | |
49 | return item.clear(); | |
50 | } | |
51 | ||
52 | function destroy (item) { | |
53 | return item.destroy(); | |
54 | } | |
55 | ||
56 | function makeClean (item) { | |
57 | item.dirty = false; | |
58 | return false; | |
59 | } | |
60 | ||
61 | function makeDirty (item) { | |
62 | item.dirty = true; | |
63 | return true; | |
64 | } | |
65 | ||
66 | function getName (item) { | |
67 | return item.name; | |
68 | } | |
53 | 69 | |
54 | 70 | var Chart = declare(has("dojo-bidi")? "dojox.charting.NonBidiChart" : "dojox.charting.Chart", null, { |
55 | 71 | // summary: |
123 | 139 | // | ) |
124 | 140 | // | .render(); |
125 | 141 | // | }); |
126 | ||
142 | ||
127 | 143 | // theme: dojox/charting/SimpleTheme? |
128 | 144 | // An optional theme to use for styling the chart. |
129 | 145 | // axes: dojox/charting/axis2d/Base{}? |
170 | 186 | this.titlePos = kwArgs.titlePos; |
171 | 187 | this.titleFont = kwArgs.titleFont; |
172 | 188 | this.titleFontColor = kwArgs.titleFontColor; |
173 | this.titleAlign = kwArgs.titleAlign; // This can be middle, left, right, or edge | |
189 | this.titleAlign = kwArgs.titleAlign; // This can be middle, left, right, or edge | |
174 | 190 | // edge is left or right aligned with chart plot edge depending on bidi. |
175 | 191 | this.chartTitle = null; |
176 | 192 | this.htmlLabels = true; |
886 | 902 | clearTimeout(this._delayedRenderHandle); |
887 | 903 | this._delayedRenderHandle = null; |
888 | 904 | } |
889 | ||
905 | ||
890 | 906 | if(this.theme){ |
891 | 907 | this.theme.clear(); |
892 | 908 | } |
925 | 941 | //this.theme.defineColors({num: requiredColors, cache: false}); |
926 | 942 | |
927 | 943 | // clear old shapes |
928 | arr.forEach(this.series, purge); | |
929 | func.forIn(this.axes, purge); | |
930 | arr.forEach(this.stack, purge); | |
944 | arr.forEach(this.series, plot2dCommon.purgeGroup); | |
945 | func.forIn(this.axes, plot2dCommon.purgeGroup); | |
946 | arr.forEach(this.stack, plot2dCommon.purgeGroup); | |
931 | 947 | var children = this.surface.children; |
932 | 948 | // starting with 1.9 the registry is optional and thus dispose is |
933 | 949 | if(shape.dispose){ |
981 | 997 | labelType = forceHtmlLabels || !has("ie") && !has("opera") && this.htmlLabels ? "html" : "gfx", |
982 | 998 | tsize = g.normalizedLength(g.splitFontString(this.titleFont).size), |
983 | 999 | tBox = g._base._getTextBox(this.title,{ font: this.titleFont }); |
984 | ||
1000 | ||
985 | 1001 | var titleAlign = this.titleAlign; |
986 | 1002 | var isRtl = has("dojo-bidi") && this.isRightToLeft(); |
987 | 1003 | var posX = dim.width/2; // Default is middle. |
1199 | 1215 | } |
1200 | 1216 | }, |
1201 | 1217 | setDir : function(dir){ |
1202 | return this; | |
1218 | return this; | |
1203 | 1219 | }, |
1204 | 1220 | _resetLeftBottom: function(axis){ |
1205 | 1221 | }, |
1206 | formatTruncatedLabel: function(element, label, labelType){ | |
1222 | formatTruncatedLabel: function(element, label, labelType){ | |
1207 | 1223 | } |
1208 | 1224 | }); |
1209 | 1225 | |
1255 | 1271 | plot.initializeScalers(plotArea, stats); |
1256 | 1272 | }); |
1257 | 1273 | } |
1258 | ||
1274 | ||
1259 | 1275 | return has("dojo-bidi")? declare("dojox.charting.Chart", [Chart, BidiChart]) : Chart; |
1260 | 1276 | }); |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/declare", "dojo/has", "./CartesianBase", "./_PlotEvents", "./common", |
1 | "dojox/gfx/fx", "dojox/lang/utils", "dojox/lang/functional", "dojox/lang/functional/reversed"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, fx, du, df, dfr){ | |
3 | ||
1 | "dojox/gfx/fx", "dojox/lang/utils", "dojox/lang/functional"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, fx, du, df){ | |
3 | ||
4 | 4 | /*===== |
5 | 5 | declare("dojox.charting.plot2d.__BarCtorArgs", dojox.charting.plot2d.__DefaultCtorArgs, { |
6 | 6 | // summary: |
7 | 7 | // Additional keyword arguments for bar charts. |
8 | ||
8 | ||
9 | 9 | // minBarSize: Number? |
10 | 10 | // The minimum size for a bar in pixels. Default is 1. |
11 | 11 | minBarSize: 1, |
12 | ||
12 | ||
13 | 13 | // maxBarSize: Number? |
14 | 14 | // The maximum size for a bar in pixels. Default is 1. |
15 | 15 | maxBarSize: 1, |
46 | 46 | // fontColor: String|dojo.Color? |
47 | 47 | // The color to be used for any text-based elements on the plot. |
48 | 48 | fontColor: "", |
49 | ||
49 | ||
50 | 50 | // enableCache: Boolean? |
51 | 51 | // Whether the bars rect are cached from one rendering to another. This improves the rendering performance of |
52 | 52 | // successive rendering but penalize the first rendering. Default false. |
53 | 53 | enableCache: false |
54 | 54 | }); |
55 | 55 | =====*/ |
56 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
57 | ||
56 | ||
58 | 57 | var alwaysFalse = function(){ return false; } |
59 | 58 | |
60 | 59 | return declare("dojox.charting.plot2d.Bars", [CartesianBase, _PlotEvents], { |
105 | 104 | t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t; |
106 | 105 | return stats; // Object |
107 | 106 | }, |
108 | ||
107 | ||
109 | 108 | createRect: function(run, creator, params){ |
110 | 109 | var rect; |
111 | 110 | if(this.opt.enableCache && run._rectFreePool.length > 0){ |
148 | 147 | this.resetEvents(); |
149 | 148 | var s; |
150 | 149 | if(this.dirty){ |
151 | arr.forEach(this.series, purgeGroup); | |
150 | arr.forEach(this.series, dc.purgeGroup); | |
152 | 151 | this._eventSeries = {}; |
153 | 152 | this.cleanGroup(); |
154 | 153 | s = this.getGroup(); |
158 | 157 | ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler), |
159 | 158 | vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler), |
160 | 159 | baseline = Math.max(this._hScaler.bounds.lower, |
161 | this._hAxis ? this._hAxis.naturalBaseline : 0), | |
160 | this._hAxis ? this._hAxis.naturalBaseline : 0), | |
162 | 161 | baselineWidth = ht(baseline), |
163 | 162 | events = this.events(); |
164 | 163 | var bar = this.getBarProperties(); |
166 | 165 | var actualLength = this.series.length; |
167 | 166 | arr.forEach(this.series, function(serie){if(serie.hidden){actualLength--;}}); |
168 | 167 | var z = actualLength; |
169 | ||
168 | ||
170 | 169 | // Collect and calculate all values |
171 | 170 | var extractedValues = this.extractValues(this._vScaler); |
172 | 171 | extractedValues = this.rearrangeValues(extractedValues, ht, baselineWidth); |
173 | ||
172 | ||
174 | 173 | for(var i = 0; i < this.series.length; i++){ |
175 | 174 | var run = this.series[i]; |
176 | 175 | if(!this.dirty && !run.dirty){ |
192 | 191 | z--; |
193 | 192 | |
194 | 193 | var eventSeries = new Array(run.data.length); |
195 | s = run.group; | |
194 | s = run.group; | |
196 | 195 | var indexed = arr.some(run.data, function(item){ |
197 | 196 | return typeof item == "number" || (item && !item.hasOwnProperty("x")); |
198 | 197 | }); |
230 | 229 | this._animateBar(sshape, offsets.l + baselineWidth, -w); |
231 | 230 | } |
232 | 231 | } |
233 | ||
232 | ||
234 | 233 | var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets); |
235 | 234 | specialFill = this._shapeFill(specialFill, rect); |
236 | 235 | var shape = this.createRect(run, s, rect).setFill(specialFill).setStroke(finalTheme.series.stroke); |
237 | 236 | if(shape.setFilter && finalTheme.series.filter){ |
238 | 237 | shape.setFilter(finalTheme.series.filter); |
239 | } | |
238 | } | |
240 | 239 | run.dyn.fill = shape.getFill(); |
241 | 240 | run.dyn.stroke = shape.getStroke(); |
242 | 241 | if(events){ |
339 | 338 | return v(0.5) || h(value); |
340 | 339 | } |
341 | 340 | return v(isNaN(value.x) ? 0.5 : value.x + 0.5) || value.y === null || h(value.y); |
342 | }, | |
341 | }, | |
343 | 342 | getBarProperties: function(){ |
344 | 343 | var f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt); |
345 | 344 | return {gap: f.gap, height: f.size, thickness: 0}; |
0 | define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/array", "dojo/has", | |
1 | "./CartesianBase", "./_PlotEvents", "./common", "dojox/lang/functional", "dojox/lang/functional/reversed", | |
2 | "dojox/lang/utils", "dojox/gfx/fx"], | |
3 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx){ | |
4 | ||
5 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
0 | define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/array", "dojo/has", | |
1 | "./CartesianBase", "./_PlotEvents", "./common", "dojox/lang/functional", | |
2 | "dojox/lang/utils", "dojox/gfx/fx"], | |
3 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, du, fx){ | |
6 | 4 | |
7 | 5 | return declare("dojox.charting.plot2d.Bubble", [CartesianBase, _PlotEvents], { |
8 | 6 | // summary: |
59 | 57 | this.resetEvents(); |
60 | 58 | this.dirty = this.isDirty(); |
61 | 59 | if(this.dirty){ |
62 | arr.forEach(this.series, purgeGroup); | |
60 | arr.forEach(this.series, dc.purgeGroup); | |
63 | 61 | this._eventSeries = {}; |
64 | 62 | this.cleanGroup(); |
65 | 63 | s = this.getGroup(); |
105 | 103 | continue; |
106 | 104 | } |
107 | 105 | s = run.group; |
108 | ||
106 | ||
109 | 107 | var frontCircles = null, outlineCircles = null, shadowCircles = null, styleFunc = this.opt.styleFunc; |
110 | 108 | |
111 | 109 | var getFinalTheme = function(item){ |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/array", "dojo/has", "./CartesianBase", "./_PlotEvents", "./common", |
1 | "dojox/lang/functional", "dojox/lang/functional/reversed", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx){ | |
3 | ||
4 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
1 | "dojox/lang/functional", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, du, fx){ | |
5 | 3 | |
6 | 4 | // Candlesticks are based on the Bars plot type; we expect the following passed |
7 | 5 | // as values in a series: |
105 | 103 | this.dirty = this.isDirty(); |
106 | 104 | var s; |
107 | 105 | if(this.dirty){ |
108 | arr.forEach(this.series, purgeGroup); | |
106 | arr.forEach(this.series, dc.purgeGroup); | |
109 | 107 | this._eventSeries = {}; |
110 | 108 | this.cleanGroup(); |
111 | 109 | s = this.getGroup(); |
135 | 133 | continue; |
136 | 134 | } |
137 | 135 | s = run.group; |
138 | ||
136 | ||
139 | 137 | for(var j = 0; j < run.data.length; ++j){ |
140 | 138 | var v = run.data[j]; |
141 | 139 | if(!this.isNullValue(v)){ |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/declare", "dojo/has", "./CartesianBase", "./_PlotEvents", "./common", |
1 | "dojox/lang/functional", "dojox/lang/functional/reversed", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx){ | |
3 | ||
4 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
1 | "dojox/lang/functional", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, du, fx){ | |
5 | 3 | |
6 | 4 | var alwaysFalse = function(){ return false; }; |
7 | 5 | |
84 | 82 | this.dirty = this.isDirty(); |
85 | 83 | var s; |
86 | 84 | if(this.dirty){ |
87 | arr.forEach(this.series, purgeGroup); | |
85 | arr.forEach(this.series, dc.purgeGroup); | |
88 | 86 | this._eventSeries = {}; |
89 | 87 | this.cleanGroup(); |
90 | 88 | s = this.getGroup(); |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/array", "dojo/has", |
1 | "./CartesianBase", "./_PlotEvents", "./common", "dojox/lang/functional", "dojox/lang/functional/reversed", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx){ | |
1 | "./CartesianBase", "./_PlotEvents", "./common", "dojox/lang/functional", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, declare, arr, has, CartesianBase, _PlotEvents, dc, df, du, fx){ | |
3 | 3 | |
4 | 4 | /*===== |
5 | 5 | declare("dojox.charting.plot2d.__DefaultCtorArgs", dojox.charting.plot2d.__CartesianCtorArgs, { |
103 | 103 | zeroLine: 0 |
104 | 104 | }); |
105 | 105 | =====*/ |
106 | ||
107 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
108 | 106 | |
109 | 107 | var DEFAULT_ANIMATION_LENGTH = 1200; // in ms |
110 | 108 | |
218 | 216 | this.dirty = this.isDirty(); |
219 | 217 | var s; |
220 | 218 | if(this.dirty){ |
221 | arr.forEach(this.series, purgeGroup); | |
219 | arr.forEach(this.series, dc.purgeGroup); | |
222 | 220 | this._eventSeries = {}; |
223 | 221 | this.cleanGroup(); |
224 | 222 | this.getGroup().setTransform(null); |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/declare", "dojo/has", "./CartesianBase", "./_PlotEvents", "./common", |
1 | "dojox/lang/functional", "dojox/lang/functional/reversed", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx){ | |
3 | ||
4 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
1 | "dojox/lang/functional", "dojox/lang/utils", "dojox/gfx/fx"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, du, fx){ | |
5 | 3 | |
6 | 4 | // Candlesticks are based on the Bars plot type; we expect the following passed |
7 | 5 | // as values in a series: |
104 | 102 | this.resetEvents(); |
105 | 103 | this.dirty = this.isDirty(); |
106 | 104 | if(this.dirty){ |
107 | arr.forEach(this.series, purgeGroup); | |
105 | arr.forEach(this.series, dc.purgeGroup); | |
108 | 106 | this._eventSeries = {}; |
109 | 107 | this.cleanGroup(); |
110 | 108 | var s = this.getGroup(); |
0 | 0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/declare", "dojo/has", "./CartesianBase", "./_PlotEvents", "./common", |
1 | "dojox/lang/functional", "dojox/lang/functional/reversed", "dojox/lang/utils", "dojox/gfx/fx", "dojox/gfx/gradutils"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, dfr, du, fx, gradutils){ | |
3 | ||
4 | var purgeGroup = dfr.lambda("item.purgeGroup()"); | |
1 | "dojox/lang/functional", "dojox/lang/utils", "dojox/gfx/fx", "dojox/gfx/gradutils"], | |
2 | function(lang, arr, declare, has, CartesianBase, _PlotEvents, dc, df, du, fx, gradutils){ | |
5 | 3 | |
6 | 4 | return declare("dojox.charting.plot2d.Scatter", [CartesianBase, _PlotEvents], { |
7 | 5 | // summary: |
50 | 48 | this.dirty = this.isDirty(); |
51 | 49 | var s; |
52 | 50 | if(this.dirty){ |
53 | arr.forEach(this.series, purgeGroup); | |
51 | arr.forEach(this.series, dc.purgeGroup); | |
54 | 52 | this._eventSeries = {}; |
55 | 53 | this.cleanGroup(); |
56 | 54 | s = this.getGroup(); |
0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/Color", | |
1 | "dojox/gfx", "dojox/lang/functional", "../scaler/common"], | |
0 | define(["dojo/_base/lang", "dojo/_base/array", "dojo/_base/Color", | |
1 | "dojox/gfx", "dojox/lang/functional", "../scaler/common"], | |
2 | 2 | function(lang, arr, Color, g, df, sc){ |
3 | ||
3 | ||
4 | 4 | var common = lang.getObject("dojox.charting.plot2d.common", true); |
5 | ||
6 | return lang.mixin(common, { | |
5 | ||
6 | return lang.mixin(common, { | |
7 | 7 | doIfLoaded: sc.doIfLoaded, |
8 | 8 | makeStroke: function(stroke){ |
9 | 9 | if(!stroke){ return stroke; } |
200 | 200 | }); |
201 | 201 | return p.join(" "); |
202 | 202 | }, |
203 | ||
203 | ||
204 | 204 | getLabel: function(/*Number*/number, /*Boolean*/fixed, /*Number*/precision){ |
205 | 205 | return sc.doIfLoaded("dojo/number", function(numberLib){ |
206 | 206 | return (fixed ? numberLib.format(number, {places : precision}) : |
208 | 208 | }, function(){ |
209 | 209 | return fixed ? number.toFixed(precision) : number.toString(); |
210 | 210 | }); |
211 | }, | |
212 | ||
213 | purgeGroup: function (item) { | |
214 | return item.purgeGroup(); | |
211 | 215 | } |
212 | 216 | }); |
213 | 217 | }); |
93 | 93 | var replacement = ""; |
94 | 94 | for(var p = 2, pl = pair.length; p < pl; p++){ |
95 | 95 | if(p == 2){ |
96 | replacement += "<" + tag + ' dtlinstruction="{% ' + token[k].replace('"', '\\"') + ' %}">'; | |
96 | replacement += "<" + tag + ' dtlinstruction="{% ' + token[k].replace(/"/g, '\\"') + ' %}">'; | |
97 | 97 | }else if(tag == pair[p]) { |
98 | 98 | continue; |
99 | 99 | }else{ |
7 | 7 | |
8 | 8 | var g = lang.getObject("dojox.gfx", true), |
9 | 9 | b = g._base = {}; |
10 | ||
10 | ||
11 | 11 | // candidates for dojox.style (work on VML and SVG nodes) |
12 | 12 | g._hasClass = function(/*DomNode*/node, /*String*/classStr){ |
13 | 13 | // summary: |
14 | 14 | // Returns whether or not the specified classes are a portion of the |
15 | 15 | // class list currently applied to the node. |
16 | ||
16 | ||
17 | 17 | // return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className) // Boolean |
18 | 18 | var cls = node.getAttribute("className"); |
19 | 19 | return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0; // Boolean |
51 | 51 | 'x-small': 0, 'small': 0, 'medium': 0, 'large': 0, 'x-large': 0, |
52 | 52 | 'xx-large': 0 |
53 | 53 | }; |
54 | var p, oldStyle; | |
54 | var p, oldStyle; | |
55 | 55 | if(has("ie")){ |
56 | 56 | // We do a font-size fix if and only if one isn't applied already. |
57 | 57 | // NOTE: If someone set the fontSize on the HTML Element, this will kill it. |
236 | 236 | // The join style to use when combining path segments. Default value 4. |
237 | 237 | join: 4 |
238 | 238 | }; |
239 | ||
239 | ||
240 | 240 | g.Fill = { |
241 | 241 | // summary: |
242 | 242 | // Defines how to fill a shape. Four types of fills can be used: solid, linear gradient, radial gradient and pattern. |
243 | 243 | // See dojox/gfx.LinearGradient, dojox/gfx.RadialGradient and dojox/gfx.Pattern respectively for more information about the properties supported by each type. |
244 | ||
244 | ||
245 | 245 | // type: String? |
246 | 246 | // The type of fill. One of 'linear', 'radial', 'pattern' or undefined. If not specified, a solid fill is assumed. |
247 | 247 | type:"", |
248 | ||
248 | ||
249 | 249 | // color: String|dojo/Color? |
250 | 250 | // The color of a solid fill type. |
251 | 251 | color:null, |
252 | ||
253 | }; | |
254 | ||
252 | ||
253 | }; | |
254 | ||
255 | 255 | g.LinearGradient = { |
256 | 256 | // summary: |
257 | 257 | // An object defining the default stylistic properties used for Linear Gradient fills. |
283 | 283 | // Default value, [{ offset: 0, color: 'black'},{offset: 1, color: 'white'}], is a gradient from black to white. |
284 | 284 | colors: [] |
285 | 285 | }; |
286 | ||
286 | ||
287 | 287 | g.RadialGradient = { |
288 | 288 | // summary: |
289 | 289 | // Specifies the properties for RadialGradients using in fills patterns. |
310 | 310 | // Default value, [{ offset: 0, color: 'black'},{offset: 1, color: 'white'}], is a gradient from black to white. |
311 | 311 | colors: [] |
312 | 312 | }; |
313 | ||
313 | ||
314 | 314 | g.Pattern = { |
315 | 315 | // summary: |
316 | 316 | // An object specifying the default properties for a Pattern using in fill operations. |
369 | 369 | g.Font = { |
370 | 370 | // summary: |
371 | 371 | // An object specifying the properties for a Font used in text operations. |
372 | ||
372 | ||
373 | 373 | // type: String |
374 | 374 | // Specifies this object is a Font, value 'font'. |
375 | 375 | type: "font", |
376 | ||
376 | ||
377 | 377 | // style: String |
378 | 378 | // The font style, one of 'normal', 'bold', default value 'normal'. |
379 | 379 | style: "normal", |
380 | ||
380 | ||
381 | 381 | // variant: String |
382 | 382 | // The font variant, one of 'normal', ... , default value 'normal'. |
383 | 383 | variant: "normal", |
384 | ||
384 | ||
385 | 385 | // weight: String |
386 | 386 | // The font weight, one of 'normal', ..., default value 'normal'. |
387 | 387 | weight: "normal", |
388 | ||
388 | ||
389 | 389 | // size: String |
390 | 390 | // The font size (including units), default value '10pt'. |
391 | 391 | size: "10pt", |
392 | ||
392 | ||
393 | 393 | // family: String |
394 | 394 | // The font family, one of 'serif', 'sanserif', ..., default value 'serif'. |
395 | 395 | family: "serif" |
408 | 408 | |
409 | 409 | // type: String |
410 | 410 | // Specifies this object is a Path, default value 'path'. |
411 | type: "path", | |
411 | type: "path", | |
412 | 412 | |
413 | 413 | // path: String |
414 | 414 | // The path commands. See W32C SVG 1.0 specification. |
772 | 772 | if(t){ |
773 | 773 | return new t(); |
774 | 774 | } |
775 | t = typeCtorCache[type] = new Function(); | |
775 | t = typeCtorCache[type] = function () {}; | |
776 | 776 | t.prototype = g[ "default" + type ]; |
777 | 777 | return new t(); |
778 | 778 | } |
999 | 999 | } |
1000 | 1000 | } |
1001 | 1001 | }); |
1002 | ||
1002 | ||
1003 | 1003 | /*===== |
1004 | 1004 | g.createSurface = function(parentNode, width, height){ |
1005 | 1005 | // summary: |
1018 | 1018 | // private |
1019 | 1019 | }; |
1020 | 1020 | =====*/ |
1021 | ||
1021 | ||
1022 | 1022 | return g; // defaults object api |
1023 | 1023 | }); |
0 | define(["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/declare", "dojo/_base/Color", | |
0 | define(["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/declare", "dojo/_base/Color", | |
1 | 1 | "dojo/on", "dojo/_base/array", "dojo/dom-geometry", "dojo/dom", "dojo/_base/sniff", |
2 | 2 | "./_base", "./shape", "./path", "./registry"], |
3 | 3 | function(kernel,lang,declare,color,on,arr,domGeom,dom,has,g,gs,pathLib){ |
255 | 255 | // returns the adjusted ("real") transformation matrix |
256 | 256 | return this.matrix; // dojox/gfx/matrix.Matrix2D |
257 | 257 | }, |
258 | ||
258 | ||
259 | 259 | setClip: function(clip){ |
260 | 260 | // summary: |
261 | 261 | // sets the clipping area of this shape. |
266 | 266 | this.inherited(arguments); |
267 | 267 | var r = this.rawNode; |
268 | 268 | if(clip){ |
269 | var clipType = clip ? "width" in clip ? "rect" : | |
270 | "cx" in clip ? "ellipse" : | |
269 | var clipType = clip ? "width" in clip ? "rect" : | |
270 | "cx" in clip ? "ellipse" : | |
271 | 271 | "points" in clip ? "polyline" : "d" in clip ? "path" : null : null; |
272 | 272 | if(clip && !clipType){ |
273 | 273 | return this; |
327 | 327 | // a Sliverlight node |
328 | 328 | this.rawNode = rawNode; |
329 | 329 | this.rawNode.tag = this.getUID(); |
330 | ||
330 | ||
331 | 331 | }, |
332 | 332 | destroy: function(){ |
333 | 333 | // summary: |
640 | 640 | }); |
641 | 641 | sl.TextPath.nodeType = "text"; |
642 | 642 | |
643 | var surfaces = {}, nullFunc = new Function; | |
643 | var surfaces = {}, nullFunc = function () {}; | |
644 | 644 | |
645 | 645 | sl.Surface = declare("dojox.gfx.silverlight.Surface", gs.Surface, { |
646 | 646 | // summary: |
888 | 888 | if(a.source){ |
889 | 889 | // support silverlight 2.0 |
890 | 890 | ev.target = a.source; |
891 | var gfxId = ev.target.tag; | |
891 | var gfxId = ev.target.tag; | |
892 | 892 | ev.gfxTarget = gs.byId(gfxId); |
893 | 893 | } |
894 | 894 | }catch(e){ |
895 | 895 | // a.source does not exist in 1.0 |
896 | 896 | } |
897 | ||
897 | ||
898 | 898 | if(a){ |
899 | 899 | try{ |
900 | 900 | ev.ctrlKey = a.ctrl; |
913 | 913 | } |
914 | 914 | return ev; |
915 | 915 | } |
916 | ||
916 | ||
917 | 917 | function keyFix(s, a){ |
918 | 918 | var ev = { |
919 | 919 | keyCode: a.platformKeyCode, |
931 | 931 | } |
932 | 932 | return ev; |
933 | 933 | } |
934 | ||
934 | ||
935 | 935 | var eventNames = { |
936 | 936 | onclick: {name: "MouseLeftButtonUp", fix: mouseFix}, |
937 | 937 | onmouseenter: {name: "MouseEnter", fix: mouseFix}, |
944 | 944 | onkeydown: {name: "KeyDown", fix: keyFix}, |
945 | 945 | onkeyup: {name: "KeyUp", fix: keyFix} |
946 | 946 | }; |
947 | ||
947 | ||
948 | 948 | var eventsProcessing = { |
949 | 949 | connect: function(name, object, method){ |
950 | 950 | return this.on(name, method ? lang.hitch(object, method) : object); |
975 | 975 | return token.remove(); |
976 | 976 | } |
977 | 977 | }; |
978 | ||
978 | ||
979 | 979 | lang.extend(sl.Shape, eventsProcessing); |
980 | 980 | lang.extend(sl.Surface, eventsProcessing); |
981 | ||
981 | ||
982 | 982 | // patch dojox/gfx |
983 | 983 | g.equalSources = function(a, b){ |
984 | 984 | // summary: |
985 | 985 | // compares event sources, returns true if they are equal |
986 | 986 | return a && b && a.equals(b); |
987 | 987 | }; |
988 | ||
988 | ||
989 | 989 | return sl; |
990 | 990 | }); |
991 |
0 | 0 | { |
1 | 1 | "name": "dojox", |
2 | "version": "1.15.0", | |
2 | "version": "1.15.2", | |
3 | 3 | "directories": { |
4 | 4 | "lib": "." |
5 | 5 | }, |
6 | 6 | "main": "main", |
7 | 7 | "dependencies": { |
8 | "dojo": "1.15.0", | |
9 | "dijit": "1.15.0" | |
8 | "dojo": "1.15.2", | |
9 | "dijit": "1.15.2" | |
10 | 10 | }, |
11 | 11 | "description": "Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.", |
12 | 12 | "license" : "BSD-3-Clause OR AFL-2.1", |
29 | 29 | // parentWidget: dojox.widget.RollingList |
30 | 30 | // Our rolling list widget |
31 | 31 | parentWidget: null, |
32 | ||
32 | ||
33 | 33 | // parentPane: dojox.widget._RollingListPane |
34 | 34 | // The pane that immediately precedes ours |
35 | 35 | parentPane: null, |
36 | ||
36 | ||
37 | 37 | // store: store |
38 | 38 | // the store we must use |
39 | 39 | store: null, |
45 | 45 | // see if the pane needs to be reloaded (store notifications are handled) |
46 | 46 | // by the pane |
47 | 47 | items: null, |
48 | ||
48 | ||
49 | 49 | // query: object |
50 | 50 | // a query to pass to the datastore. This is only used if items are null |
51 | 51 | query: null, |
52 | ||
52 | ||
53 | 53 | // queryOptions: object |
54 | 54 | // query options to be passed to the datastore |
55 | 55 | queryOptions: null, |
56 | ||
56 | ||
57 | 57 | // focusByNode: boolean |
58 | 58 | // set to false if the subclass will handle its own node focusing |
59 | 59 | _focusByNode: true, |
60 | ||
60 | ||
61 | 61 | // minWidth: integer |
62 | 62 | // the width (in px) for this pane |
63 | 63 | minWidth: 0, |
64 | ||
64 | ||
65 | 65 | _setContentAndScroll: function(/*String|DomNode|Nodelist*/cont, /*Boolean?*/isFakeContent){ |
66 | 66 | // summary: |
67 | 67 | // sets the value of the content and scrolls it into view |
78 | 78 | dojo.marginBox(n, {w: min}); |
79 | 79 | } |
80 | 80 | }, |
81 | ||
81 | ||
82 | 82 | _onMinWidthChange: function(v){ |
83 | 83 | // Called when the min width of a pane has changed |
84 | 84 | this._updateNodeWidth(this.domNode, v); |
85 | 85 | }, |
86 | ||
86 | ||
87 | 87 | _setMinWidthAttr: function(v){ |
88 | 88 | if(v !== this.minWidth){ |
89 | 89 | this.minWidth = v; |
90 | 90 | this._onMinWidthChange(v); |
91 | 91 | } |
92 | 92 | }, |
93 | ||
93 | ||
94 | 94 | startup: function(){ |
95 | 95 | if(this._started){ return; } |
96 | 96 | if(this.store && this.store.getFeatures()["dojo.data.api.Notification"]){ |
122 | 122 | this.parentWidget._onExecute(); |
123 | 123 | } |
124 | 124 | }, |
125 | ||
125 | ||
126 | 126 | focus: function(/*boolean*/force){ |
127 | 127 | // summary: |
128 | 128 | // sets the focus to this current widget |
155 | 155 | this._doQuery(); |
156 | 156 | } |
157 | 157 | }, |
158 | ||
158 | ||
159 | 159 | _doLoadItems: function(/*item[]*/items, /*function*/callback){ |
160 | 160 | // summary: |
161 | 161 | // loads the given items, and then calls the callback when they |
180 | 180 | }); |
181 | 181 | } |
182 | 182 | }, |
183 | ||
183 | ||
184 | 184 | _doQuery: function(){ |
185 | 185 | // summary: |
186 | 186 | // either runs the query or loads potentially not-yet-loaded items. |
217 | 217 | } |
218 | 218 | return false; |
219 | 219 | }, |
220 | ||
220 | ||
221 | 221 | _onSetItem: function(/* item */ item, |
222 | 222 | /* attribute-name-string */ attribute, |
223 | 223 | /* Object|Array */ oldValue, |
228 | 228 | this.refresh(); |
229 | 229 | } |
230 | 230 | }, |
231 | ||
231 | ||
232 | 232 | _onNewItem: function(/* item */ newItem, /*object?*/ parentInfo){ |
233 | 233 | // summary: |
234 | 234 | // called when an item is added to the store |
242 | 242 | this.refresh(); |
243 | 243 | } |
244 | 244 | }, |
245 | ||
245 | ||
246 | 246 | _onDeleteItem: function(/* item */ deletedItem){ |
247 | 247 | // summary: |
248 | 248 | // called when an item is removed from the store |
253 | 253 | this.refresh(); |
254 | 254 | } |
255 | 255 | }, |
256 | ||
256 | ||
257 | 257 | onFetchStart: function(){ |
258 | 258 | // summary: |
259 | 259 | // called before a fetch starts |
260 | 260 | return this.loadingMessage; |
261 | 261 | }, |
262 | ||
262 | ||
263 | 263 | onFetchError: function(/*Error*/ error){ |
264 | 264 | // summary: |
265 | 265 | // called when a fetch error occurs. |
271 | 271 | // called before a load starts |
272 | 272 | return this.loadingMessage; |
273 | 273 | }, |
274 | ||
274 | ||
275 | 275 | onLoadError: function(/*Error*/ error){ |
276 | 276 | // summary: |
277 | 277 | // called when a load error occurs. |
278 | 278 | return this.errorMessage; |
279 | 279 | }, |
280 | ||
280 | ||
281 | 281 | onItems: function(){ |
282 | 282 | // summary: |
283 | 283 | // called after a fetch or load - at this point, this.items should be |
288 | 288 | } |
289 | 289 | this._onLoadHandler(); |
290 | 290 | } |
291 | ||
291 | ||
292 | 292 | }); |
293 | 293 | |
294 | 294 | dojo.declare("dojox.widget._RollingListGroupPane", |
295 | 295 | [dojox.widget._RollingListPane], { |
296 | 296 | // summary: |
297 | 297 | // a pane that will handle groups (treats them as menu items) |
298 | ||
298 | ||
299 | 299 | // templateString: string |
300 | 300 | // our template |
301 | 301 | templateString: '<div><div dojoAttachPoint="containerNode"></div>' + |
306 | 306 | // _menu: dijit.Menu |
307 | 307 | // The menu that we will call addChild() on for adding items |
308 | 308 | _menu: null, |
309 | ||
309 | ||
310 | 310 | _setContent: function(/*String|DomNode|Nodelist*/cont){ |
311 | 311 | if(!this._menu){ |
312 | 312 | // Only set the content if we don't already have a menu |
370 | 370 | this.inherited(arguments); |
371 | 371 | this._onMinWidthChange(this.minWidth); |
372 | 372 | }, |
373 | ||
373 | ||
374 | 374 | _checkScrollConnection: function(doLoad){ |
375 | 375 | // summary: |
376 | 376 | // checks whether or not we need to connect to our onscroll |
387 | 387 | this._scrollConn = this.connect(this.domNode, "onscroll", "_onScrollPane"); |
388 | 388 | } |
389 | 389 | }, |
390 | ||
390 | ||
391 | 391 | startup: function(){ |
392 | 392 | this.inherited(arguments); |
393 | 393 | this.parentWidget._updateClass(this.domNode, "GroupPane"); |
394 | 394 | }, |
395 | ||
395 | ||
396 | 396 | focus: function(/*boolean*/force){ |
397 | 397 | // summary: |
398 | 398 | // sets the focus to this current widget |
401 | 401 | this.disconnect(this._pendingFocus); |
402 | 402 | } |
403 | 403 | delete this._pendingFocus; |
404 | ||
404 | ||
405 | 405 | // We focus the right widget - either the focusedChild, the |
406 | 406 | // selected node, the first menu item, or the menu itself |
407 | 407 | var focusWidget = this._menu.focusedChild; |
436 | 436 | this._pendingFocus = this.connect(this, "onItems", "focus"); |
437 | 437 | } |
438 | 438 | }, |
439 | ||
439 | ||
440 | 440 | _getMenu: function(){ |
441 | 441 | // summary: |
442 | 442 | // returns a widget to be used for the container widget. |
478 | 478 | } |
479 | 479 | return menu; |
480 | 480 | }, |
481 | ||
481 | ||
482 | 482 | _onScrollPane: function(){ |
483 | 483 | // summary: |
484 | 484 | // called when the pane has been scrolled - it sets a timeout |
489 | 489 | } |
490 | 490 | this._visibleLoadPending = window.setTimeout(dojo.hitch(this, "_loadVisibleItems"), 500); |
491 | 491 | }, |
492 | ||
492 | ||
493 | 493 | _loadVisibleItems: function(){ |
494 | 494 | // summary: |
495 | 495 | // loads the items that are currently visible in the pane |
544 | 544 | }); |
545 | 545 | this._doLoadItems(itemsToLoad, onItems); |
546 | 546 | }, |
547 | ||
547 | ||
548 | 548 | _getSelected: function(/*dijit.Menu?*/ menu){ |
549 | 549 | // summary: |
550 | 550 | // returns the selected menu item - or null if none are selected |
559 | 559 | } |
560 | 560 | return null; |
561 | 561 | }, |
562 | ||
562 | ||
563 | 563 | _setSelected: function(/*dijit.MenuItem?*/ item, /*dijit.Menu?*/ menu){ |
564 | 564 | // summary: |
565 | 565 | // selects the given item in the given menu (defaults to pane's menu) |
576 | 576 | [dijit._Widget, dijit._Templated, dijit._Container], { |
577 | 577 | // summary: |
578 | 578 | // a rolling list that can be tied to a data store with children |
579 | ||
579 | ||
580 | 580 | // templateString: String |
581 | 581 | // The template to be used to construct the widget. |
582 | 582 | templateString: dojo.cache("dojox.widget", "RollingList/RollingList.html"), |
583 | 583 | widgetsInTemplate: true, |
584 | ||
584 | ||
585 | 585 | // className: string |
586 | 586 | // an additional class (or space-separated classes) to add for our widget |
587 | 587 | className: "", |
588 | ||
588 | ||
589 | 589 | // store: store |
590 | 590 | // the store we must use |
591 | 591 | store: null, |
592 | ||
592 | ||
593 | 593 | // query: object |
594 | 594 | // a query to pass to the datastore. This is only used if items are null |
595 | 595 | query: null, |
596 | ||
596 | ||
597 | 597 | // queryOptions: object |
598 | 598 | // query options to be passed to the datastore |
599 | 599 | queryOptions: null, |
600 | ||
600 | ||
601 | 601 | // childrenAttrs: String[] |
602 | 602 | // one ore more attributes that holds children of a node |
603 | 603 | childrenAttrs: ["children"], |
605 | 605 | // parentAttr: string |
606 | 606 | // the attribute to read for finding our parent item (if any) |
607 | 607 | parentAttr: "", |
608 | ||
608 | ||
609 | 609 | // value: item |
610 | 610 | // The value that has been selected |
611 | 611 | value: null, |
612 | ||
612 | ||
613 | 613 | // executeOnDblClick: boolean |
614 | 614 | // Set to true if you want to call onExecute when an item is |
615 | 615 | // double-clicked, false if you want to call onExecute yourself. (mainly |
616 | 616 | // used for popups to control how they want to be handled) |
617 | 617 | executeOnDblClick: true, |
618 | ||
618 | ||
619 | 619 | // preloadItems: boolean or int |
620 | 620 | // if set to true, then onItems will be called only *after* all items have |
621 | 621 | // been loaded (ie store.isLoaded will return true for all of them). If |
624 | 624 | // of the integer. The onItems function will need to be aware of handling |
625 | 625 | // items that may not be loaded |
626 | 626 | preloadItems: false, |
627 | ||
627 | ||
628 | 628 | // showButtons: boolean |
629 | 629 | // if set to true, then buttons for "OK" and "Cancel" will be provided |
630 | 630 | showButtons: false, |
631 | ||
631 | ||
632 | 632 | // okButtonLabel: string |
633 | 633 | // The string to use for the OK button - will use dijit's common "OK" string |
634 | 634 | // if not set |
635 | 635 | okButtonLabel: "", |
636 | ||
636 | ||
637 | 637 | // cancelButtonLabel: string |
638 | 638 | // The string to use for the Cancel button - will use dijit's common |
639 | 639 | // "Cancel" string if not set |
643 | 643 | // the minimum pane width (in px) for all child panes. If they are narrower, |
644 | 644 | // the width will be increased to this value. |
645 | 645 | minPaneWidth: 0, |
646 | ||
646 | ||
647 | 647 | postMixInProperties: function(){ |
648 | 648 | // summary: |
649 | 649 | // Mix in our labels, if they are not set |
652 | 652 | this.okButtonLabel = this.okButtonLabel || loc.buttonOk; |
653 | 653 | this.cancelButtonLabel = this.cancelButtonLabel || loc.buttonCancel; |
654 | 654 | }, |
655 | ||
655 | ||
656 | 656 | _setShowButtonsAttr: function(doShow){ |
657 | 657 | // summary: |
658 | 658 | // Sets the visibility of the buttons for the widget |
671 | 671 | } |
672 | 672 | } |
673 | 673 | }, |
674 | ||
674 | ||
675 | 675 | _itemsMatch: function(/*item*/ item1, /*item*/ item2){ |
676 | 676 | // summary: |
677 | 677 | // returns whether or not the two items match - checks ID if |
684 | 684 | return (item1 == item2 || |
685 | 685 | (this._isIdentity && this.store.getIdentity(item1) == this.store.getIdentity(item2))); |
686 | 686 | }, |
687 | ||
687 | ||
688 | 688 | _removeAfter: function(/*Widget or int*/ idx){ |
689 | 689 | // summary: |
690 | 690 | // removes all widgets after the given widget (or index) |
712 | 712 | this._setValue(selItem); |
713 | 713 | } |
714 | 714 | }, |
715 | ||
715 | ||
716 | 716 | addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){ |
717 | 717 | // summary: |
718 | 718 | // adds a child to this rolling list - if passed an insertIndex, |
731 | 731 | widget.focus(); |
732 | 732 | } |
733 | 733 | }, |
734 | ||
734 | ||
735 | 735 | _setMinPaneWidthAttr: function(value){ |
736 | 736 | // summary: |
737 | 737 | // Sets the min pane width of all children |
742 | 742 | }); |
743 | 743 | } |
744 | 744 | }, |
745 | ||
745 | ||
746 | 746 | _updateClass: function(/* Node */ node, /* String */ type, /* Object? */ options){ |
747 | 747 | // summary: |
748 | 748 | // sets the state of the given node with the given type and options |
765 | 765 | } |
766 | 766 | }); |
767 | 767 | }, |
768 | ||
768 | ||
769 | 769 | scrollIntoView: function(/*dijit._Widget*/ childWidget){ |
770 | 770 | // summary: |
771 | 771 | // scrolls the given widget into view |
781 | 781 | return; |
782 | 782 | }), 1); |
783 | 783 | }, |
784 | ||
784 | ||
785 | 785 | resize: function(args){ |
786 | 786 | dijit.layout._LayoutWidget.prototype.resize.call(this, args); |
787 | 787 | }, |
788 | ||
788 | ||
789 | 789 | layout: function(){ |
790 | 790 | var children = this.getChildren(); |
791 | 791 | if(this._contentBox){ |
808 | 808 | } |
809 | 809 | } |
810 | 810 | }, |
811 | ||
811 | ||
812 | 812 | _onChange: function(/*item*/ value){ |
813 | 813 | this.onChange(value); |
814 | 814 | }, |
822 | 822 | this._onChange(value); |
823 | 823 | } |
824 | 824 | }, |
825 | ||
825 | ||
826 | 826 | _setValueAttr: function(/* item */ value){ |
827 | 827 | // summary: |
828 | 828 | // sets the value of this widget to the given store item |
835 | 835 | this._onItemClick(null, pane, null, null); |
836 | 836 | return; |
837 | 837 | } |
838 | ||
838 | ||
839 | 839 | var fetchParentItems = dojo.hitch(this, function(/*item*/ item, /*function*/callback){ |
840 | 840 | // summary: |
841 | 841 | // Fetches the parent items for the given item |
879 | 879 | }, this); |
880 | 880 | } |
881 | 881 | }); |
882 | ||
882 | ||
883 | 883 | var setFromChain = dojo.hitch(this, function(/*item[]*/itemChain, /*integer*/idx){ |
884 | 884 | // summary: |
885 | 885 | // Sets the value of the widget at the given index in the chain - onchanges are not |
921 | 921 | this.set("value", null); |
922 | 922 | } |
923 | 923 | }); |
924 | ||
924 | ||
925 | 925 | var parentChain = []; |
926 | 926 | var onParents = dojo.hitch(this, function(/*item[]*/ parents){ |
927 | 927 | // summary: |
937 | 937 | setFromChain(parentChain, 0); |
938 | 938 | } |
939 | 939 | }); |
940 | ||
940 | ||
941 | 941 | // Only set the value in display if we are shown - if we are in a dropdown, |
942 | 942 | // and are hidden, don't actually do the scrolling in the display (it can |
943 | 943 | // mess up layouts) |
948 | 948 | onParents([value]); |
949 | 949 | } |
950 | 950 | }, |
951 | ||
951 | ||
952 | 952 | _onItemClick: function(/* Event */ evt, /* dijit._Contained */ pane, /* item */ item, /* item[]? */ children){ |
953 | 953 | // summary: |
954 | 954 | // internally called when a widget should pop up its child |
955 | ||
955 | ||
956 | 956 | if(evt){ |
957 | 957 | var itemPane = this._getPaneForItem(item, pane, children); |
958 | 958 | var alreadySelected = (evt.type == "click" && evt.alreadySelected); |
983 | 983 | } |
984 | 984 | this._visibleItem = item; |
985 | 985 | }, |
986 | ||
986 | ||
987 | 987 | _getPaneForItem: function(/* item? */ item, /* dijit._Contained? */ parentPane, /* item[]? */ children){ |
988 | 988 | // summary: |
989 | 989 | // gets the pane for the given item, and mixes in our needed parts |
1003 | 1003 | } |
1004 | 1004 | return ret; |
1005 | 1005 | }, |
1006 | ||
1006 | ||
1007 | 1007 | _getMenuItemForItem: function(/*item*/ item, /* dijit._Contained */ parentPane){ |
1008 | 1008 | // summary: |
1009 | 1009 | // returns a widget for the given store item. The returned |
1049 | 1049 | widgetItem.store = this.store; |
1050 | 1050 | widgetItem.item = item; |
1051 | 1051 | if(!widgetItem.label){ |
1052 | widgetItem.attr("label", this.store.getLabel(item).replace(/</,"<")); | |
1052 | widgetItem.attr("label", this.store.getLabel(item).replace(/</g,"<")); | |
1053 | 1053 | } |
1054 | 1054 | if(widgetItem.focusNode){ |
1055 | 1055 | var self = this; |
1083 | 1083 | return widgetItem; |
1084 | 1084 | } |
1085 | 1085 | }, |
1086 | ||
1086 | ||
1087 | 1087 | _setStore: function(/* dojo/data/api/Read */ store){ |
1088 | 1088 | // summary: |
1089 | 1089 | // sets the store for this widget */ |
1093 | 1093 | var rootPane = this._getPaneForItem(); |
1094 | 1094 | this.addChild(rootPane, 0); |
1095 | 1095 | }, |
1096 | ||
1096 | ||
1097 | 1097 | _onKey: function(/*Event*/ e){ |
1098 | 1098 | // summary: |
1099 | 1099 | // called when a keypress event happens on this widget |
1110 | 1110 | return; |
1111 | 1111 | } |
1112 | 1112 | }, |
1113 | ||
1113 | ||
1114 | 1114 | _resetValue: function(){ |
1115 | 1115 | // summary: |
1116 | 1116 | // function called when the value is reset. |
1117 | 1117 | this.set("value", this._lastExecutedValue); |
1118 | 1118 | }, |
1119 | ||
1119 | ||
1120 | 1120 | _onCancel: function(){ |
1121 | 1121 | // summary: |
1122 | 1122 | // function called when the cancel button is clicked. It |
1124 | 1124 | this._resetValue(); |
1125 | 1125 | this.onCancel(); |
1126 | 1126 | }, |
1127 | ||
1127 | ||
1128 | 1128 | _onExecute: function(){ |
1129 | 1129 | // summary: |
1130 | 1130 | // function called when the OK button is clicked or when an |
1132 | 1132 | this._lastExecutedValue = this.get("value"); |
1133 | 1133 | this.onExecute(); |
1134 | 1134 | }, |
1135 | ||
1135 | ||
1136 | 1136 | focus: function(){ |
1137 | 1137 | // summary: |
1138 | 1138 | // sets the focus state of this widget |
1155 | 1155 | } |
1156 | 1156 | } |
1157 | 1157 | }, |
1158 | ||
1158 | ||
1159 | 1159 | handleKey:function(/*Event*/e){ |
1160 | 1160 | // summary: |
1161 | 1161 | // handle the key for the given event - called by dropdown |
1170 | 1170 | } |
1171 | 1171 | return true; |
1172 | 1172 | }, |
1173 | ||
1173 | ||
1174 | 1174 | _updateChildClasses: function(){ |
1175 | 1175 | // summary: |
1176 | 1176 | // Called when a child is added or removed - so that we can |
1197 | 1197 | this.inherited(arguments); |
1198 | 1198 | this._lastExecutedValue = this.get("value"); |
1199 | 1199 | }, |
1200 | ||
1200 | ||
1201 | 1201 | getChildItems: function(/*item*/ item){ |
1202 | 1202 | // summary: |
1203 | 1203 | // Returns the child items for the given store item |
1210 | 1210 | }); |
1211 | 1211 | return childItems; |
1212 | 1212 | }, |
1213 | ||
1213 | ||
1214 | 1214 | getMenuItemForItem: function(/*item*/ item, /* dijit._Contained */ parentPane, /* item[]? */ children){ |
1215 | 1215 | // summary: |
1216 | 1216 | // user overridable function to return a widget for the given item |
1236 | 1236 | // summary: |
1237 | 1237 | // called when an item is clicked - it receives the store item |
1238 | 1238 | }, |
1239 | ||
1239 | ||
1240 | 1240 | onExecute: function(){ |
1241 | 1241 | // summary: |
1242 | 1242 | // exists so that popups don't disappear too soon |
1243 | 1243 | }, |
1244 | ||
1244 | ||
1245 | 1245 | onCancel: function(){ |
1246 | 1246 | // summary: |
1247 | 1247 | // exists so that we can close ourselves if we wish |
1248 | 1248 | }, |
1249 | ||
1249 | ||
1250 | 1250 | onChange: function(/* item */ value){ |
1251 | 1251 | // summary: |
1252 | 1252 | // called when the value of this widget has changed |
1253 | 1253 | } |
1254 | ||
1254 | ||
1255 | 1255 | }); |
2 | 2 | dojo.require("dojox.encoding.base64"); |
3 | 3 | |
4 | 4 | dojox.xmpp.util.xmlEncode = function(str) { |
5 | if(str) { | |
6 | str = str.replace("&", "&").replace(">", ">").replace("<", "<").replace("'", "'").replace('"', """); | |
7 | } | |
8 | return str; | |
5 | return dojo.string.escape(str); | |
9 | 6 | }; |
10 | 7 | |
11 | 8 | dojox.xmpp.util.encodeJid = function(jid) { |
48 | 45 | }; |
49 | 46 | |
50 | 47 | dojox.xmpp.util.decodeJid = function(jid) { |
51 | ||
48 | ||
52 | 49 | jid = jid.replace(/\\([23][02367acef])/g, function(match) { |
53 | 50 | switch(match){ |
54 | 51 | case "\\20" : |
72 | 69 | } |
73 | 70 | return "ARG"; |
74 | 71 | }); |
75 | ||
72 | ||
76 | 73 | return jid; |
77 | 74 | }; |
78 | 75 | |
86 | 83 | elem.append(attributes[attr]); |
87 | 84 | elem.append('" '); |
88 | 85 | } |
89 | ||
86 | ||
90 | 87 | if (terminal){ |
91 | 88 | elem.append("/>"); |
92 | 89 | }else{ |
13 | 13 | "url": "https://github.com/dojo/util.git" |
14 | 14 | }, |
15 | 15 | "dependencies": { |
16 | "dojo": "1.15.0", | |
17 | "dijit": "1.15.0", | |
18 | "dojox": "1.15.0", | |
16 | "dojo": "1.15.2", | |
17 | "dijit": "1.15.2", | |
18 | "dojox": "1.15.2", | |
19 | 19 | "dijit-themes": "1.15.0-pre" |
20 | 20 | }, |
21 | 21 | "devDependencies": { |
35 | 35 | |
36 | 36 | if (useSourceMaps) { |
37 | 37 | output += "//# sourceMappingURL=" + dest.split("/").pop() + ".map"; |
38 | fs.writeFile(dest + ".map", gen_options.source_map.toString(), "utf-8"); | |
38 | fs.writeFile(dest + ".map", gen_options.source_map.toString(), "utf-8", function() {}); | |
39 | 39 | } |
40 | 40 | |
41 | 41 | return output; |
0 | 0 | define([], function(){ |
1 | 1 | var |
2 | rev = "$Rev: d545ad7 $".match(/[0-9a-f]{7,}/), | |
2 | rev = "$Rev: 7a1fe03 $".match(/[0-9a-f]{7,}/), | |
3 | 3 | version= { |
4 | major: 1, minor: 15, patch: 0, flag: "", | |
4 | major: 1, minor: 15, patch: 2, flag: "", | |
5 | 5 | revision: rev ? rev[0] : NaN, |
6 | 6 | toString: function(){ |
7 | 7 | var v= version; |
20 | 20 | }; |
21 | 21 | |
22 | 22 | console.log("\n"+doh._line); |
23 | console.log("The Dojo Unit Test Harness, $Rev: d545ad7 $"); | |
23 | console.log("The Dojo Unit Test Harness, $Rev: 7a1fe03 $"); | |
24 | 24 | console.log("Copyright (c) 2018, The JS Foundation, All Rights Reserved"); |
25 | 25 | console.log("Running with node.js"); |
26 | 26 | for (var tests= [], args= config["commandLineArgs"], i= 0, arg; i<args.length; i++) { |
20 | 20 | }; |
21 | 21 | |
22 | 22 | print("\n"+doh._line); |
23 | print("The Dojo Unit Test Harness, $Rev: d545ad7 $"); | |
23 | print("The Dojo Unit Test Harness, $Rev: 7a1fe03 $"); | |
24 | 24 | print("Copyright (c) 2018, The JS Foundation, All Rights Reserved"); |
25 | 25 | for (var tests= [], args= config["commandLineArgs"], i= 0, arg; i<args.length; i++) { |
26 | 26 | arg= (args[i]+"").split("="); |
0 | 0 | <!DOCTYPE html> |
1 | 1 | <html style="height:100%;"> |
2 | 2 | <head> |
3 | <title>The Dojo Unit Test Harness, $Rev: d545ad7 $</title> | |
3 | <title>The Dojo Unit Test Harness, $Rev: 7a1fe03 $</title> | |
4 | 4 | <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/> |
5 | 5 | <meta name="apple-mobile-web-app-capable" content="yes"> |
6 | 6 | <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> |
0 | 0 | { |
1 | 1 | "name": "doh", |
2 | "version": "1.15.0", | |
2 | "version": "1.15.2", | |
3 | 3 | "directories": { |
4 | 4 | "lib": "." |
5 | 5 | }, |