123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- /**
- * Copyright (c) 2006-2015, JGraph Ltd
- * Copyright (c) 2006-2015, Gaudenz Alder
- */
- var mxLog =
- {
- /**
- * Class: mxLog
- *
- * A singleton class that implements a simple console.
- *
- * Variable: consoleName
- *
- * Specifies the name of the console window. Default is 'Console'.
- */
- consoleName: 'Console',
-
- /**
- * Variable: TRACE
- *
- * Specified if the output for <enter> and <leave> should be visible in the
- * console. Default is false.
- */
- TRACE: false,
- /**
- * Variable: DEBUG
- *
- * Specifies if the output for <debug> should be visible in the console.
- * Default is true.
- */
- DEBUG: true,
- /**
- * Variable: WARN
- *
- * Specifies if the output for <warn> should be visible in the console.
- * Default is true.
- */
- WARN: true,
- /**
- * Variable: buffer
- *
- * Buffer for pre-initialized content.
- */
- buffer: '',
-
- /**
- * Function: init
- *
- * Initializes the DOM node for the console. This requires document.body to
- * point to a non-null value. This is called from within <setVisible> if the
- * log has not yet been initialized.
- */
- init: function()
- {
- if (mxLog.window == null && document.body != null)
- {
- var title = mxLog.consoleName + ' - mxGraph ' + mxClient.VERSION;
- // Creates a table that maintains the layout
- var table = document.createElement('table');
- table.setAttribute('width', '100%');
- table.setAttribute('height', '100%');
- var tbody = document.createElement('tbody');
- var tr = document.createElement('tr');
- var td = document.createElement('td');
- td.style.verticalAlign = 'top';
-
- // Adds the actual console as a textarea
- mxLog.textarea = document.createElement('textarea');
- mxLog.textarea.setAttribute('wrap', 'off');
- mxLog.textarea.setAttribute('readOnly', 'true');
- mxLog.textarea.style.height = '100%';
- mxLog.textarea.style.resize = 'none';
- mxLog.textarea.value = mxLog.buffer;
- // Workaround for wrong width in standards mode
- if (mxClient.IS_NS && document.compatMode != 'BackCompat')
- {
- mxLog.textarea.style.width = '99%';
- }
- else
- {
- mxLog.textarea.style.width = '100%';
- }
-
- td.appendChild(mxLog.textarea);
- tr.appendChild(td);
- tbody.appendChild(tr);
- // Creates the container div
- tr = document.createElement('tr');
- mxLog.td = document.createElement('td');
- mxLog.td.style.verticalAlign = 'top';
- mxLog.td.setAttribute('height', '30px');
-
- tr.appendChild(mxLog.td);
- tbody.appendChild(tr);
- table.appendChild(tbody);
- // Adds various debugging buttons
- mxLog.addButton('Info', function (evt)
- {
- mxLog.info();
- });
-
- mxLog.addButton('DOM', function (evt)
- {
- var content = mxUtils.getInnerHtml(document.body);
- mxLog.debug(content);
- });
-
- mxLog.addButton('Trace', function (evt)
- {
- mxLog.TRACE = !mxLog.TRACE;
-
- if (mxLog.TRACE)
- {
- mxLog.debug('Tracing enabled');
- }
- else
- {
- mxLog.debug('Tracing disabled');
- }
- });
- mxLog.addButton('Copy', function (evt)
- {
- try
- {
- mxUtils.copy(mxLog.textarea.value);
- }
- catch (err)
- {
- mxUtils.alert(err);
- }
- });
- mxLog.addButton('Show', function (evt)
- {
- try
- {
- mxUtils.popup(mxLog.textarea.value);
- }
- catch (err)
- {
- mxUtils.alert(err);
- }
- });
-
- mxLog.addButton('Clear', function (evt)
- {
- mxLog.textarea.value = '';
- });
- // Cross-browser code to get window size
- var h = 0;
- var w = 0;
-
- if (typeof(window.innerWidth) === 'number')
- {
- h = window.innerHeight;
- w = window.innerWidth;
- }
- else
- {
- h = (document.documentElement.clientHeight || document.body.clientHeight);
- w = document.body.clientWidth;
- }
- mxLog.window = new mxWindow(title, table, Math.max(0, w - 320), Math.max(0, h - 210), 300, 160);
- mxLog.window.setMaximizable(true);
- mxLog.window.setScrollable(false);
- mxLog.window.setResizable(true);
- mxLog.window.setClosable(true);
- mxLog.window.destroyOnClose = false;
-
- // Workaround for ignored textarea height in various setups
- if (((mxClient.IS_NS || mxClient.IS_IE) && !mxClient.IS_GC &&
- !mxClient.IS_SF && document.compatMode != 'BackCompat') ||
- document.documentMode == 11)
- {
- var elt = mxLog.window.getElement();
-
- var resizeHandler = function(sender, evt)
- {
- mxLog.textarea.style.height = Math.max(0, elt.offsetHeight - 70) + 'px';
- };
-
- mxLog.window.addListener(mxEvent.RESIZE_END, resizeHandler);
- mxLog.window.addListener(mxEvent.MAXIMIZE, resizeHandler);
- mxLog.window.addListener(mxEvent.NORMALIZE, resizeHandler);
- mxLog.textarea.style.height = '92px';
- }
- }
- },
-
- /**
- * Function: info
- *
- * Writes the current navigator information to the console.
- */
- info: function()
- {
- mxLog.writeln(mxUtils.toString(navigator));
- },
-
- /**
- * Function: addButton
- *
- * Adds a button to the console using the given label and function.
- */
- addButton: function(lab, funct)
- {
- var button = document.createElement('button');
- mxUtils.write(button, lab);
- mxEvent.addListener(button, 'click', funct);
- mxLog.td.appendChild(button);
- },
-
- /**
- * Function: isVisible
- *
- * Returns true if the console is visible.
- */
- isVisible: function()
- {
- if (mxLog.window != null)
- {
- return mxLog.window.isVisible();
- }
-
- return false;
- },
-
- /**
- * Function: show
- *
- * Shows the console.
- */
- show: function()
- {
- mxLog.setVisible(true);
- },
- /**
- * Function: setVisible
- *
- * Shows or hides the console.
- */
- setVisible: function(visible)
- {
- if (mxLog.window == null)
- {
- mxLog.init();
- }
- if (mxLog.window != null)
- {
- mxLog.window.setVisible(visible);
- }
- },
- /**
- * Function: enter
- *
- * Writes the specified string to the console
- * if <TRACE> is true and returns the current
- * time in milliseconds.
- *
- * Example:
- *
- * (code)
- * mxLog.show();
- * var t0 = mxLog.enter('Hello');
- * // Do something
- * mxLog.leave('World!', t0);
- * (end)
- */
- enter: function(string)
- {
- if (mxLog.TRACE)
- {
- mxLog.writeln('Entering '+string);
-
- return new Date().getTime();
- }
- },
- /**
- * Function: leave
- *
- * Writes the specified string to the console
- * if <TRACE> is true and computes the difference
- * between the current time and t0 in milliseconds.
- * See <enter> for an example.
- */
- leave: function(string, t0)
- {
- if (mxLog.TRACE)
- {
- var dt = (t0 != 0) ? ' ('+(new Date().getTime() - t0)+' ms)' : '';
- mxLog.writeln('Leaving '+string+dt);
- }
- },
-
- /**
- * Function: debug
- *
- * Adds all arguments to the console if <DEBUG> is enabled.
- *
- * Example:
- *
- * (code)
- * mxLog.show();
- * mxLog.debug('Hello, World!');
- * (end)
- */
- debug: function()
- {
- if (mxLog.DEBUG)
- {
- mxLog.writeln.apply(this, arguments);
- }
- },
-
- /**
- * Function: warn
- *
- * Adds all arguments to the console if <WARN> is enabled.
- *
- * Example:
- *
- * (code)
- * mxLog.show();
- * mxLog.warn('Hello, World!');
- * (end)
- */
- warn: function()
- {
- if (mxLog.WARN)
- {
- mxLog.writeln.apply(this, arguments);
- }
- },
- /**
- * Function: write
- *
- * Adds the specified strings to the console.
- */
- write: function()
- {
- var string = '';
-
- for (var i = 0; i < arguments.length; i++)
- {
- string += arguments[i];
-
- if (i < arguments.length - 1)
- {
- string += ' ';
- }
- }
-
- if (mxLog.textarea != null)
- {
- mxLog.textarea.value = mxLog.textarea.value + string;
- // Workaround for no update in Presto 2.5.22 (Opera 10.5)
- if (navigator.userAgent != null &&
- navigator.userAgent.indexOf('Presto/2.5') >= 0)
- {
- mxLog.textarea.style.visibility = 'hidden';
- mxLog.textarea.style.visibility = 'visible';
- }
-
- mxLog.textarea.scrollTop = mxLog.textarea.scrollHeight;
- }
- else
- {
- mxLog.buffer += string;
- }
- },
-
- /**
- * Function: writeln
- *
- * Adds the specified strings to the console, appending a linefeed at the
- * end of each string.
- */
- writeln: function()
- {
- var string = '';
-
- for (var i = 0; i < arguments.length; i++)
- {
- string += arguments[i];
-
- if (i < arguments.length - 1)
- {
- string += ' ';
- }
- }
- mxLog.write(string + '\n');
- }
-
- };
- __mxOutput.mxLog = typeof mxLog !== 'undefined' ? mxLog : undefined;
|