App-MFILE-WWW
view release on metacpan or search on metacpan
lib/App/MFILE/WWW/Resource.pm view on Meta::CPAN
=cut
sub test_html {
my ( $self ) = @_;
$log->debug( "Entering " . __PACKAGE__ . "::test_html" );
my $r = '';
$r = '<!DOCTYPE html>';
$r .= '<html>';
$r .= '<head>';
$r .= '<meta charset="utf-8">';
$r .= '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">';
$r .= '<meta http-equiv="Pragma" content="no-cache">';
$r .= '<meta http-equiv="Expires" content="0">';
$r .= "<title>App::MFILE::WWW " . $meta->META_MFILE_APPVERSION . " (Unit testing)</title>";
$r .= '<link rel="stylesheet" type="text/css" href="/css/qunit.css" />';
# Bring in RequireJS with testing == 1 (true)
$r .= $self->_require_js(1);
$r .= '</head><body>';
$r .= '<div id="myLoadProgress" class="loadProgress">Loading RequireJS...</div>';
$r .= '<div id="qunit"></div>';
$r .= '<div id="qunit-fixture"></div>';
# Run unit tests; see:
# - test.js (in mfile-www core)
# - app/test.js (in app; e.g. dochazka-www
# - test-go.js (in mfile-www core)
$r .= '<script>require([\'test\', \'app/test\', \'test-go\']);</script>';
$r .= '</body></html>';
return $r;
}
# HTML necessary for RequireJS
sub _require_js {
my ( $self, $testing, $ce, $cepriv ) = @_;
my $r = '';
$r .= "<script src='" . $site->MFILE_WWW_JS_REQUIREJS . "'></script>";
$r .= '<script>';
# configure RequireJS
$r .= 'require.config({';
# baseUrl is where we have all our JavaScript files
$r .= 'baseUrl: "' . $site->MFILE_WWW_REQUIREJS_BASEURL . '",';
# map 'jquery' module to 'jquery-private.js'
# (of course, the real 'jquery.js' must be present in 'js/')
$r .= 'map: {';
$r .= " '*': { 'jquery': 'jquery-private' },";
$r .= " 'jquery-private': { 'jquery': 'jquery' }";
$r .= '},';
# callbacks for showing module loading progress
$r .= 'onNodeCreated: function(node, config, moduleName, url) {';
$r .= " var t = document.getElementById('myLoadProgress'),";
$r .= " m = '';";
$r .= " m = 'module ' + moduleName + ' is about to be loaded';";
$r .= " console.log(m);";
$r .= " t.innerHTML = m;";
$r .= " node.addEventListener('load', function() {";
$r .= " m = 'module ' + moduleName + ' has been loaded';";
$r .= " console.log(m);";
$r .= " t.innerHTML = m;";
$r .= ' });';
$r .= " node.addEventListener('error', function() {";
$r .= " m = 'module ' + moduleName + ' could not be loaded';";
$r .= " console.log(m);";
$r .= " t.innerHTML = m;";
$r .= ' });';
$r .= '},';
# path config
$r .= 'paths: {';
$r .= ' "app": "../' . $site->MFILE_APPNAME . '",'; # sibling to baseUrl
$r .= ' "QUnit": "qunit"'; # in baseUrl
$r .= '},';
# QUnit needs some coaxing to work together with RequireJS
$r .= 'shim: {';
$r .= ' "QUnit": {';
$r .= ' exports: "QUnit",';
$r .= ' init: function () {';
$r .= ' QUnit.config.autoload = false;';
$r .= ' QUnit.config.autostart = false;';
$r .= ' }';
$r .= ' }';
$r .= '},';
# default waitSeconds is just 7, which is too little for production
$r .= 'waitSeconds: 30';
# end of require.config
$r .= "});";
# initialize configuration parameters that we need on JavaScript side
$r .= 'requirejs.config({ config: {';
$r .= '\'cf\': { ';
# appName, appVersion
$r .= 'appName: \'' . $site->MFILE_APPNAME . '\',';
$r .= 'appVersion: \'' . $meta->META_MFILE_APPVERSION . '\',';
# standaloneMode (boolean; false means "derived distro mode")
$r .= 'standaloneMode: \'' . ( $meta->META_WWW_STANDALONE_MODE ? 'true' : 'false' ) . '\',';
# currentUser
$r .= "currentUser: " . ( $ce ? to_json( $ce ) : 'null' ) . ',';
$r .= "currentUserPriv: " . ( $cepriv ? "\'$cepriv\'" : 'null' ) . ',';
# loginDialog
$r .= 'loginDialogChallengeText: \'' . $site->MFILE_WWW_LOGIN_DIALOG_CHALLENGE_TEXT . '\',';
$r .= 'loginDialogMaxLengthUsername: ' . $site->MFILE_WWW_LOGIN_DIALOG_MAXLENGTH_USERNAME . ',';
$r .= 'loginDialogMaxLengthPassword: ' . $site->MFILE_WWW_LOGIN_DIALOG_MAXLENGTH_PASSWORD . ',';
( run in 1.803 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )