emujs
Version:
A responsiveness testing tool on browsers
96 lines (78 loc) • 2.16 kB
JavaScript
var view = (function($, utils){ // jshint ignore:line
var ret,
// an iframe
viewport,
rotate,
screenshot,
refresh,
resize,
rescale;
/**
* Resize the viewport
* @param {Object} size {width, height}
*/
resize = function(size){
var width = size.width,
height = size.height,
ratio = width / height,
scaledWidth = width,
scaledHeight = height,
body = $('#emu .view')[0];
// calculate scale ratio with padding 40px
if(height > body.offsetHeight - 40){
scaledHeight = body.offsetHeight - 40;
scaledWidth = ratio * scaledHeight;
}
if(scaledWidth > body.offsetWidth - 40){
scaledWidth = body.offsetWidth - 40;
scaledHeight = scaledWidth / ratio;
}
var scaleRatio = Math.round((scaledWidth / width + 0.00001) * 100) / 100;
// apply width and height then scale, center
$(viewport).css({
height : height,
width : width
});
utils.scale(viewport, scaleRatio);
utils.center(viewport);
};
/** Refresh the viewport */
refresh = function(){
viewport.src = utils.url;
};
/** Rotate the viewport */
rotate = function(){
resize({
width : viewport.offsetHeight,
height: viewport.offsetWidth
});
};
rescale= function(){
resize({
width : viewport.offsetWidth,
height: viewport.offsetHeight
});
};
/** Request a screenshot from viewport */
screenshot = function(){
viewport.src = utils.url.with({'screenshot' : ''});
};
/** Install viewport components */
ret = function(){
// rotate button
var rotatebtn = $('<button/>').text('rotate').click(rotate);
// screenshot button
var scshotbtn = $('<button/>').text('screenshot').click(screenshot);
// iframe
viewport = $('<iframe/>', {
src : utils.url
})[0];
// layer < utils[screenshot, rotate] < viewport --> #emu
$('<div/>').addClass('top layer view').append($('<div/>').addClass('utils').append(scshotbtn).append(rotatebtn)).append(viewport).appendTo('#emu');
};
ret.resize = resize;
ret.rotate = rotate;
ret.refresh= refresh;
ret.rescale= rescale;
return ret;
})($, utils);