Blame | Last modification | View Log | RSS feed
#!/usr/bin/env node// Add Platform Class// v1.0// Automatically adds the platform class to the body tag// after the `prepare` command. By placing the platform CSS classes// directly in the HTML built for the platform, it speeds up// rendering the correct layout/style for the specific platform// instead of waiting for the JS to figure out the correct classes.var fs = require('fs');var path = require('path');var rootdir = process.argv[2];function addPlatformBodyTag(indexPath, platform) {// add the platform class to the body tagtry {var platformClass = 'platform-' + platform;var cordovaClass = 'platform-cordova platform-webview';var html = fs.readFileSync(indexPath, 'utf8');var bodyTag = findBodyTag(html);if(!bodyTag) return; // no opening body tag, something's wrongif(bodyTag.indexOf(platformClass) > -1) return; // already addedvar newBodyTag = bodyTag;var classAttr = findClassAttr(bodyTag);if(classAttr) {// body tag has existing class attribute, add the classnamevar endingQuote = classAttr.substring(classAttr.length-1);var newClassAttr = classAttr.substring(0, classAttr.length-1);newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote;newBodyTag = bodyTag.replace(classAttr, newClassAttr);} else {// add class attribute to the body tagnewBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">');}html = html.replace(bodyTag, newBodyTag);fs.writeFileSync(indexPath, html, 'utf8');process.stdout.write('add to body class: ' + platformClass + '\n');} catch(e) {process.stdout.write(e);}}function findBodyTag(html) {// get the body tagtry{return html.match(/<body(?=[\s>])(.*?)>/gi)[0];}catch(e){}}function findClassAttr(bodyTag) {// get the body tag's class attributetry{return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0];}catch(e){}}if (rootdir) {// go through each of the platform directories that have been preparedvar platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []);for(var x=0; x<platforms.length; x++) {// open up the index.html file at the www roottry {var platform = platforms[x].trim().toLowerCase();var indexPath;if(platform == 'android') {indexPath = path.join('platforms', platform, 'assets', 'www', 'index.html');} else {indexPath = path.join('platforms', platform, 'www', 'index.html');}if(fs.existsSync(indexPath)) {addPlatformBodyTag(indexPath, platform);}} catch(e) {process.stdout.write(e);}}}