r66851 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r66850‎ | r66851 | r66852 >
Date:21:22, 24 May 2010
Author:dale
Status:deferred
Tags:
Comment:
* fixed scope of parser swap constants.
* removed debug statement from uploadHandler
* trim output of wikitext description for inline insert of asset.
* bumped revision number of gadget
Modified paths:
  • /branches/MwEmbedStandAlone/languages/mw.Parser.js (modified) (history)
  • /branches/MwEmbedStandAlone/modules/AddMedia/mw.RemoteSearchDriver.js (modified) (history)
  • /branches/MwEmbedStandAlone/modules/AddMedia/mw.UploadHandler.js (modified) (history)
  • /branches/MwEmbedStandAlone/modules/AddMedia/searchLibs/baseRemoteSearch.js (modified) (history)
  • /branches/MwEmbedStandAlone/modules/ApiProxy/json2.js (deleted) (history)
  • /branches/MwEmbedStandAlone/modules/ApiProxy/mw.ApiProxy.js (modified) (history)
  • /branches/MwEmbedStandAlone/remotes/mediaWiki.js (modified) (history)

Diff [purge]

Index: branches/MwEmbedStandAlone/languages/mw.Parser.js
@@ -2,12 +2,11 @@
33 * Mediawiki language text parser
44 */
55
6 - // Setup jQuery swap string constant
 6+// Setup swap string constants
 7+var JQUERY_SWAP_STRING = 'ZjQuerySwapZ';
 8+var LINK_SWAP_STRING = 'ZreplaceZ';
79
8 -
910 ( function( mw ) {
10 - var JQUERY_SWAP_STRING = 'ZjQuerySwapZ';
11 - var LINK_SWAP_STRING = 'ZreplaceZ';
1211
1312 // The parser magic global
1413 var pMagicSet = { };
Index: branches/MwEmbedStandAlone/modules/AddMedia/mw.UploadHandler.js
@@ -536,9 +536,7 @@
537537 // Run the JS equivalent of SpecialUpload.php getInitialPageText
538538 comment_value = this.getCommentText( comment_value, license, copyStatus, source );
539539 this.rewriteDescriptionText = false;
540 - }
541 - var cat = $j( '#wpUploadDescription' );
542 - debugger;
 540+ }
543541 mw.log( 'getUploadDescription:: new val:' + comment_value );
544542 return comment_value;
545543 },
Index: branches/MwEmbedStandAlone/modules/AddMedia/searchLibs/baseRemoteSearch.js
@@ -492,10 +492,10 @@
493493 /**
494494 * Get the wiki embed code for a given resource object
495495 *
496 - * @param {Object} resource Resoruce to get embed wiki code for.
 496+ * @param {Object} resource Resource to get embed wiki code for.
497497 */
498498 getEmbedWikiCode:function( resource ) {
499 - var layout = ( resource.layout ) ? resource.layout:"right"
 499+ var layout = ( resource.layout ) ? resource.layout : "right";
500500 var o = '[[' + this.rsd.canonicalFileNS + ':' + resource.target_resource_title + '|thumb|' + layout;
501501
502502 if ( !resource.target_width && resource.width ) {
@@ -506,7 +506,7 @@
507507 o += '|' + resource.target_width + 'px';
508508
509509 if ( resource.inlineDesc )
510 - o += '|' + resource.inlineDesc;
 510+ o += '|' + $j.trim( resource.inlineDesc );
511511
512512 o += ']]';
513513 return o;
Index: branches/MwEmbedStandAlone/modules/AddMedia/mw.RemoteSearchDriver.js
@@ -1821,7 +1821,7 @@
18221822 * @param {Number} resIndex the resource index to build unique ids
18231823 * @param {Object} resource the resource object
18241824 */
1825 - getResultHtmlList:function( provider, resIndex, resource ) {
 1825+ getResultHtmlList: function( provider, resIndex, resource ) {
18261826
18271827 var $resultBox = $j( '<div />' )
18281828 .addClass( 'mv_clip_list_result' )
Index: branches/MwEmbedStandAlone/modules/ApiProxy/json2.js
@@ -1,479 +0,0 @@
2 -/*
3 - http://www.JSON.org/json2.js
4 - 2009-09-29
5 -
6 - Public Domain.
7 -
8 - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
9 -
10 - See http://www.JSON.org/js.html
11 -
12 - This file creates a global JSON object containing two methods: stringify
13 - and parse.
14 -
15 - JSON.stringify(value, replacer, space)
16 - value any JavaScript value, usually an object or array.
17 -
18 - replacer an optional parameter that determines how object
19 - values are stringified for objects. It can be a
20 - function or an array of strings.
21 -
22 - space an optional parameter that specifies the indentation
23 - of nested structures. If it is omitted, the text will
24 - be packed without extra whitespace. If it is a number,
25 - it will specify the number of spaces to indent at each
26 - level. If it is a string (such as '\t' or '&nbsp;'),
27 - it contains the characters used to indent at each level.
28 -
29 - This method produces a JSON text from a JavaScript value.
30 -
31 - When an object value is found, if the object contains a toJSON
32 - method, its toJSON method will be called and the result will be
33 - stringified. A toJSON method does not serialize: it returns the
34 - value represented by the name/value pair that should be serialized,
35 - or undefined if nothing should be serialized. The toJSON method
36 - will be passed the key associated with the value, and this will be
37 - bound to the value
38 -
39 - For example, this would serialize Dates as ISO strings.
40 -
41 - Date.prototype.toJSON = function (key) {
42 - function f(n) {
43 - // Format integers to have at least two digits.
44 - return n < 10 ? '0' + n : n;
45 - }
46 -
47 - return this.getUTCFullYear() + '-' +
48 - f(this.getUTCMonth() + 1) + '-' +
49 - f(this.getUTCDate()) + 'T' +
50 - f(this.getUTCHours()) + ':' +
51 - f(this.getUTCMinutes()) + ':' +
52 - f(this.getUTCSeconds()) + 'Z';
53 - };
54 -
55 - You can provide an optional replacer method. It will be passed the
56 - key and value of each member, with this bound to the containing
57 - object. The value that is returned from your method will be
58 - serialized. If your method returns undefined, then the member will
59 - be excluded from the serialization.
60 -
61 - If the replacer parameter is an array of strings, then it will be
62 - used to select the members to be serialized. It filters the results
63 - such that only members with keys listed in the replacer array are
64 - stringified.
65 -
66 - Values that do not have JSON representations, such as undefined or
67 - functions, will not be serialized. Such values in objects will be
68 - dropped; in arrays they will be replaced with null. You can use
69 - a replacer function to replace those with JSON values.
70 - JSON.stringify(undefined) returns undefined.
71 -
72 - The optional space parameter produces a stringification of the
73 - value that is filled with line breaks and indentation to make it
74 - easier to read.
75 -
76 - If the space parameter is a non-empty string, then that string will
77 - be used for indentation. If the space parameter is a number, then
78 - the indentation will be that many spaces.
79 -
80 - Example:
81 -
82 - text = JSON.stringify(['e', {pluribus: 'unum'}]);
83 - // text is '["e",{"pluribus":"unum"}]'
84 -
85 -
86 - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
87 - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
88 -
89 - text = JSON.stringify([new Date()], function (key, value) {
90 - return this[key] instanceof Date ?
91 - 'Date(' + this[key] + ')' : value;
92 - });
93 - // text is '["Date(---current time---)"]'
94 -
95 -
96 - JSON.parse(text, reviver)
97 - This method parses a JSON text to produce an object or array.
98 - It can throw a SyntaxError exception.
99 -
100 - The optional reviver parameter is a function that can filter and
101 - transform the results. It receives each of the keys and values,
102 - and its return value is used instead of the original value.
103 - If it returns what it received, then the structure is not modified.
104 - If it returns undefined then the member is deleted.
105 -
106 - Example:
107 -
108 - // Parse the text. Values that look like ISO date strings will
109 - // be converted to Date objects.
110 -
111 - myData = JSON.parse(text, function (key, value) {
112 - var a;
113 - if (typeof value === 'string') {
114 - a =
115 -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
116 - if (a) {
117 - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
118 - +a[5], +a[6]));
119 - }
120 - }
121 - return value;
122 - });
123 -
124 - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
125 - var d;
126 - if (typeof value === 'string' &&
127 - value.slice(0, 5) === 'Date(' &&
128 - value.slice(-1) === ')') {
129 - d = new Date(value.slice(5, -1));
130 - if (d) {
131 - return d;
132 - }
133 - }
134 - return value;
135 - });
136 -
137 -
138 - This is a reference implementation. You are free to copy, modify, or
139 - redistribute.
140 -
141 - This code should be minified before deployment.
142 - See http://javascript.crockford.com/jsmin.html
143 -
144 - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
145 - NOT CONTROL.
146 -*/
147 -
148 -/*jslint evil: true, strict: false */
149 -
150 -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
151 - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
152 - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
153 - lastIndex, length, parse, prototype, push, replace, slice, stringify,
154 - test, toJSON, toString, valueOf
155 -*/
156 -
157 -
158 -// Create a JSON object only if one does not already exist. We create the
159 -// methods in a closure to avoid creating global variables.
160 -
161 -if (!this.JSON) {
162 - this.JSON = {};
163 -}
164 -
165 -(function () {
166 -
167 - function f(n) {
168 - // Format integers to have at least two digits.
169 - return n < 10 ? '0' + n : n;
170 - }
171 -
172 - if (typeof Date.prototype.toJSON !== 'function') {
173 -
174 - Date.prototype.toJSON = function (key) {
175 -
176 - return isFinite(this.valueOf()) ?
177 - this.getUTCFullYear() + '-' +
178 - f(this.getUTCMonth() + 1) + '-' +
179 - f(this.getUTCDate()) + 'T' +
180 - f(this.getUTCHours()) + ':' +
181 - f(this.getUTCMinutes()) + ':' +
182 - f(this.getUTCSeconds()) + 'Z' : null;
183 - };
184 -
185 - String.prototype.toJSON =
186 - Number.prototype.toJSON =
187 - Boolean.prototype.toJSON = function (key) {
188 - return this.valueOf();
189 - };
190 - }
191 -
192 - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
193 - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
194 - gap,
195 - indent,
196 - meta = { // table of character substitutions
197 - '\b': '\\b',
198 - '\t': '\\t',
199 - '\n': '\\n',
200 - '\f': '\\f',
201 - '\r': '\\r',
202 - '"' : '\\"',
203 - '\\': '\\\\'
204 - },
205 - rep;
206 -
207 -
208 - function quote(string) {
209 -
210 -// If the string contains no control characters, no quote characters, and no
211 -// backslash characters, then we can safely slap some quotes around it.
212 -// Otherwise we must also replace the offending characters with safe escape
213 -// sequences.
214 -
215 - escapable.lastIndex = 0;
216 - return escapable.test(string) ?
217 - '"' + string.replace(escapable, function (a) {
218 - var c = meta[a];
219 - return typeof c === 'string' ? c :
220 - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
221 - }) + '"' :
222 - '"' + string + '"';
223 - }
224 -
225 -
226 - function str(key, holder) {
227 -
228 -// Produce a string from holder[key].
229 -
230 - var i, // The loop counter.
231 - k, // The member key.
232 - v, // The member value.
233 - length,
234 - mind = gap,
235 - partial,
236 - value = holder[key];
237 -
238 -// If the value has a toJSON method, call it to obtain a replacement value.
239 -
240 - if (value && typeof value === 'object' &&
241 - typeof value.toJSON === 'function') {
242 - value = value.toJSON(key);
243 - }
244 -
245 -// If we were called with a replacer function, then call the replacer to
246 -// obtain a replacement value.
247 -
248 - if (typeof rep === 'function') {
249 - value = rep.call(holder, key, value);
250 - }
251 -
252 -// What happens next depends on the value's type.
253 -
254 - switch (typeof value) {
255 - case 'string':
256 - return quote(value);
257 -
258 - case 'number':
259 -
260 -// JSON numbers must be finite. Encode non-finite numbers as null.
261 -
262 - return isFinite(value) ? String(value) : 'null';
263 -
264 - case 'boolean':
265 - case 'null':
266 -
267 -// If the value is a boolean or null, convert it to a string. Note:
268 -// typeof null does not produce 'null'. The case is included here in
269 -// the remote chance that this gets fixed someday.
270 -
271 - return String(value);
272 -
273 -// If the type is 'object', we might be dealing with an object or an array or
274 -// null.
275 -
276 - case 'object':
277 -
278 -// Due to a specification blunder in ECMAScript, typeof null is 'object',
279 -// so watch out for that case.
280 -
281 - if (!value) {
282 - return 'null';
283 - }
284 -
285 -// Make an array to hold the partial results of stringifying this object value.
286 -
287 - gap += indent;
288 - partial = [];
289 -
290 -// Is the value an array?
291 -
292 - if (Object.prototype.toString.apply(value) === '[object Array]') {
293 -
294 -// The value is an array. Stringify every element. Use null as a placeholder
295 -// for non-JSON values.
296 -
297 - length = value.length;
298 - for (i = 0; i < length; i += 1) {
299 - partial[i] = str(i, value) || 'null';
300 - }
301 -
302 -// Join all of the elements together, separated with commas, and wrap them in
303 -// brackets.
304 -
305 - v = partial.length === 0 ? '[]' :
306 - gap ? '[\n' + gap +
307 - partial.join(',\n' + gap) + '\n' +
308 - mind + ']' :
309 - '[' + partial.join(',') + ']';
310 - gap = mind;
311 - return v;
312 - }
313 -
314 -// If the replacer is an array, use it to select the members to be stringified.
315 -
316 - if (rep && typeof rep === 'object') {
317 - length = rep.length;
318 - for (i = 0; i < length; i += 1) {
319 - k = rep[i];
320 - if (typeof k === 'string') {
321 - v = str(k, value);
322 - if (v) {
323 - partial.push(quote(k) + (gap ? ': ' : ':') + v);
324 - }
325 - }
326 - }
327 - } else {
328 -
329 -// Otherwise, iterate through all of the keys in the object.
330 -
331 - for (k in value) {
332 - if (Object.hasOwnProperty.call(value, k)) {
333 - v = str(k, value);
334 - if (v) {
335 - partial.push(quote(k) + (gap ? ': ' : ':') + v);
336 - }
337 - }
338 - }
339 - }
340 -
341 -// Join all of the member texts together, separated with commas,
342 -// and wrap them in braces.
343 -
344 - v = partial.length === 0 ? '{}' :
345 - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
346 - mind + '}' : '{' + partial.join(',') + '}';
347 - gap = mind;
348 - return v;
349 - }
350 - }
351 -
352 -// If the JSON object does not yet have a stringify method, give it one.
353 -
354 - if (typeof JSON.stringify !== 'function') {
355 - JSON.stringify = function (value, replacer, space) {
356 -
357 -// The stringify method takes a value and an optional replacer, and an optional
358 -// space parameter, and returns a JSON text. The replacer can be a function
359 -// that can replace values, or an array of strings that will select the keys.
360 -// A default replacer method can be provided. Use of the space parameter can
361 -// produce text that is more easily readable.
362 -
363 - var i;
364 - gap = '';
365 - indent = '';
366 -
367 -// If the space parameter is a number, make an indent string containing that
368 -// many spaces.
369 -
370 - if (typeof space === 'number') {
371 - for (i = 0; i < space; i += 1) {
372 - indent += ' ';
373 - }
374 -
375 -// If the space parameter is a string, it will be used as the indent string.
376 -
377 - } else if (typeof space === 'string') {
378 - indent = space;
379 - }
380 -
381 -// If there is a replacer, it must be a function or an array.
382 -// Otherwise, throw an error.
383 -
384 - rep = replacer;
385 - if (replacer && typeof replacer !== 'function' &&
386 - (typeof replacer !== 'object' ||
387 - typeof replacer.length !== 'number')) {
388 - throw new Error('JSON.stringify');
389 - }
390 -
391 -// Make a fake root object containing our value under the key of ''.
392 -// Return the result of stringifying the value.
393 -
394 - return str('', {'': value});
395 - };
396 - }
397 -
398 -
399 -// If the JSON object does not yet have a parse method, give it one.
400 -
401 - if (typeof JSON.parse !== 'function') {
402 - JSON.parse = function (text, reviver) {
403 -
404 -// The parse method takes a text and an optional reviver function, and returns
405 -// a JavaScript value if the text is a valid JSON text.
406 -
407 - var j;
408 -
409 - function walk(holder, key) {
410 -
411 -// The walk method is used to recursively walk the resulting structure so
412 -// that modifications can be made.
413 -
414 - var k, v, value = holder[key];
415 - if (value && typeof value === 'object') {
416 - for (k in value) {
417 - if (Object.hasOwnProperty.call(value, k)) {
418 - v = walk(value, k);
419 - if (v !== undefined) {
420 - value[k] = v;
421 - } else {
422 - delete value[k];
423 - }
424 - }
425 - }
426 - }
427 - return reviver.call(holder, key, value);
428 - }
429 -
430 -
431 -// Parsing happens in four stages. In the first stage, we replace certain
432 -// Unicode characters with escape sequences. JavaScript handles many characters
433 -// incorrectly, either silently deleting them, or treating them as line endings.
434 -
435 - cx.lastIndex = 0;
436 - if (cx.test(text)) {
437 - text = text.replace(cx, function (a) {
438 - return '\\u' +
439 - ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
440 - });
441 - }
442 -
443 -// In the second stage, we run the text against regular expressions that look
444 -// for non-JSON patterns. We are especially concerned with '()' and 'new'
445 -// because they can cause invocation, and '=' because it can cause mutation.
446 -// But just to be safe, we want to reject all unexpected forms.
447 -
448 -// We split the second stage into 4 regexp operations in order to work around
449 -// crippling inefficiencies in IE's and Safari's regexp engines. First we
450 -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
451 -// replace all simple value tokens with ']' characters. Third, we delete all
452 -// open brackets that follow a colon or comma or that begin the text. Finally,
453 -// we look to see that the remaining characters are only whitespace or ']' or
454 -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
455 -
456 - if (/^[\],:{}\s]*$/.
457 -test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
458 -replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
459 -replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
460 -
461 -// In the third stage we use the eval function to compile the text into a
462 -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
463 -// in JavaScript: it can begin a block or an object literal. We wrap the text
464 -// in parens to eliminate the ambiguity.
465 -
466 - j = eval('(' + text + ')');
467 -
468 -// In the optional fourth stage, we recursively walk the new structure, passing
469 -// each name/value pair to a reviver function for possible transformation.
470 -
471 - return typeof reviver === 'function' ?
472 - walk({'': j}, '') : j;
473 - }
474 -
475 -// If the text is not JSON parseable, then a SyntaxError is thrown.
476 -
477 - throw new SyntaxError('JSON.parse');
478 - };
479 - }
480 -}());
Index: branches/MwEmbedStandAlone/modules/ApiProxy/mw.ApiProxy.js
@@ -417,8 +417,9 @@
418418 * @param {URL} apiUrl The url of the api server
419419 */
420420 // Include gadget js ( in case the user has not enabled the gadget on that domain )
421 - var gadgetWithJS = '?withJS=MediaWiki:MwEmbed.js';
422 - //var gadgetWithJS = '';
 421+ //var gadgetWithJS = '?withJS=MediaWiki:MwEmbed.js';
 422+ var gadgetWithJS = '';
 423+
423424 function getServerFrame( context ) {
424425 if( ! context || ! context.apiUrl ){
425426 mw.log( "Error no context api url " );
Index: branches/MwEmbedStandAlone/remotes/mediaWiki.js
@@ -4,7 +4,7 @@
55 */
66 var urlparts = getRemoteEmbedPath();
77 var mwEmbedHostPath = urlparts[0];
8 -var mwRemoteVersion = 'r123';
 8+var mwRemoteVersion = 'r124';
99 var mwUseScriptLoader = true;
1010
1111 // Log the mwRemote version ( will determine what version of js we get )

Status & tagging log