Newer
Older
KaiFengAxure / 开封原型APP+微信公众号 / resources / scripts / axure / ie.js
@zhangdeliang zhangdeliang on 28 May 14 KB 1

//// ******* Internet Explorer MANAGER ******** //
////this is to handle all the stupid IE Stuff
//$axure.internal(function($ax) {
//    if(!IE_10_AND_BELOW) return;

//    var _ieColorManager = {};
//    if(Number(BROWSER_VERSION) < 9) $ax.ieColorManager = _ieColorManager;

//    var _applyIEFixedPosition = function() {
//        if(Number(BROWSER_VERSION) >= 7) return;

//        $axure(function(diagramObject) { return diagramObject.fixedVertical; }).$()
//            .appendTo($('body'))
//            .css('position', 'absolute').css('margin-left', 0 + 'px').css('margin-top', 0 + 'px');

//        var handleScroll = function() {
//            $axure(function(diagramObject) { return diagramObject.fixedVertical; })
//                .each(function(diagramObject, elementId) {
//                    var win = $(window);
//                    var windowWidth = win.width();
//                    var windowHeight = win.height();
//                    var windowScrollLeft = win.scrollLeft();
//                    var windowScrollTop = win.scrollTop();

//                    var newLeft = 0;
//                    var newTop = 0;
//                    var elementQuery = $('#' + elementId);
//                    var elementAxQuery = $ax('#' + elementId);
//                    var width = elementAxQuery.width();
//                    var height = elementAxQuery.height();

//                    var horz = diagramObject.fixedHorizontal;
//                    if(horz == 'left') {
//                        newLeft = windowScrollLeft + diagramObject.fixedMarginHorizontal;
//                    } else if(horz == 'center') {
//                        newLeft = windowScrollLeft + ((windowWidth - width) / 2) + diagramObject.fixedMarginHorizontal;
//                    } else if(horz == 'right') {
//                        newLeft = windowScrollLeft + windowWidth - width - diagramObject.fixedMarginHorizontal;
//                    }

//                    var vert = diagramObject.fixedVertical;
//                    if(vert == 'top') {
//                        newTop = windowScrollTop + diagramObject.fixedMarginVertical;
//                    } else if(vert == 'middle') {
//                        newTop = windowScrollTop + ((windowHeight - height) / 2) + diagramObject.fixedMarginVertical;
//                    } else if(vert == 'bottom') {
//                        newTop = windowScrollTop + windowHeight - height - diagramObject.fixedMarginVertical;
//                    }
//                    elementQuery.css('top', newTop + 'px').css('left', newLeft + 'px');
//                });
//        };

//        $(window).scroll(handleScroll);
//        $axure.resize(handleScroll);
//        handleScroll();
//    };

//    var _applyBackground = function() {
//        if(Number(BROWSER_VERSION) >= 9) return;

//        var styleChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId);
//        var argb = _getArgb($ax.pageData.page, styleChain);
//        var hexColor = _getHexColor(argb, false);
//        if(hexColor) $('body').css('background-color', hexColor);

//        _applyBackgroundToQuery($ax('*'));
//    };

//    var _applyBackgroundToQuery = function(query) {
//        if(Number(BROWSER_VERSION) >= 9) return;

//        var styleChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId);
//        query.each(function(obj, elementId) {
//            if ($ax.public.fn.IsDynamicPanel(obj.type)) {
//                var stateCount = obj.diagrams.length;
//                for(var j = 0; j < stateCount; j++) {
//                    var stateId = $ax.repeater.applySuffixToElementId(elementId, '_state' + j);
//                    var argb = _getArgb(obj.diagrams[j], styleChain);
//                    var hexColor = _getHexColor(argb, true);
//                    if(hexColor) $jobj(stateId).css('background-color', hexColor);
//                }
//            } else if ($ax.public.fn.IsRepeater(obj.type)) {

//            }
//        });
//    };
//    _ieColorManager.applyBackground = _applyBackgroundToQuery;

//    var _getArgb = function(diagram, styleChain) {
//        var argb = undefined;
//        for(var i = 0; i < styleChain.length && !argb; i++) {
//            var style = diagram.adaptiveStyles[styleChain[i]];
//            argb = style.fill && style.fill.color;
//        }
//        if(!argb) argb = diagram.style.fill.color;
//        return argb;
//    };

//    var gMult = 256;
//    var rMult = gMult * 256;
//    var aMult = rMult * 256;

//    var _getHexColor = function(argb, allowWhite) {
//        var a = Math.floor(argb / aMult);
//        argb -= a * aMult;

//        var r = Math.floor(argb / rMult);
//        argb -= r * rMult;

//        var g = Math.floor(argb / gMult);
//        var b = argb - g * gMult;

//        return _getColorFromArgb(a, r, g, b, allowWhite);
//    };

//    var _getColorFromArgb = function(a, r, g, b, allowWhite) {
//        if(Number(BROWSER_VERSION) >= 9) return undefined;

//        //convert the color with alpha to a color with no alpha (assuming white background)
//        r = Math.min((r * a) / 255 + 255 - a, 255);
//        g = Math.min((g * a) / 255 + 255 - a, 255);
//        b = Math.min((b * a) / 255 + 255 - a, 255);

//        if(a == 0) return undefined;
//        if(!allowWhite && (r == 255 && g == 255 && b == 255)) return undefined;

//        var color = '#';
//        color += Math.floor(r / 16).toString(16);
//        color += Math.floor(r % 16).toString(16);
//        color += Math.floor(g / 16).toString(16);
//        color += Math.floor(g % 16).toString(16);
//        color += Math.floor(b / 16).toString(16);
//        color += Math.floor(b % 16).toString(16);
//        return color;
//    };
//    _ieColorManager.getColorFromArgb = _getColorFromArgb;

//    var getIEOffset = function(transform, rect) {
//        var translatedVertexes = [
//            $axure.utils.Vector2D(0, 0), //we dont translate, so the orgin is fixed
//            transform.mul($axure.utils.Vector2D(0, rect.height)),
//            transform.mul($axure.utils.Vector2D(rect.width, 0)),
//            transform.mul($axure.utils.Vector2D(rect.width, rect.height))];

//        var minX = 0, minY = 0, maxX = 0, maxY = 0;
//        $.each(translatedVertexes, function(index, p) {
//            minX = Math.min(minX, p.x);
//            minY = Math.min(minY, p.y);
//            maxX = Math.max(maxX, p.x);
//            maxY = Math.max(maxY, p.y);
//        });

//        return $axure.utils.Vector2D(
//            (maxX - minX - rect.width) / 2,
//            (maxY - minY - rect.height) / 2);
//    };

//    var _filterFromTransform = function(transform) {
//        return "progid:DXImageTransform.Microsoft.Matrix(M11=" + transform.m11 +
//            ", M12=" + transform.m12 + ", M21=" + transform.m21 +
//                ", M22=" + transform.m22 + ", SizingMethod='auto expand')";
//    };

//    var _applyIERotation = function() {
//        if(Number(BROWSER_VERSION) >= 9) return;

//        $axure(function(diagramObject) {
//            return ((diagramObject.style.rotation && Math.abs(diagramObject.style.rotation) > 0.1)
//                || (diagramObject.style.textRotation && Math.abs(diagramObject.style.textRotation) > 0.1))
//                && !diagramObject.isContained;
//        }).each(function(diagramObject, elementId) {
//            var rotation = diagramObject.style.rotation || 0;
//            var $element = $('#' + elementId);
//            var axElement = $ax('#' + elementId);
//            var width = axElement.width();
//            var height = axElement.height();
//            var originX = width / 2;
//            var originY = height / 2;

//            var shapeIeOffset;
//            $element.children().each(function() {
//                var $child = $(this);
//                var axChild = $ax('#' + $child.attr('id'));
//                var childWidth = axChild.width();
//                var childHeight = axChild.height() + $child.position().top;
//                var centerX = $child.position().left + (childWidth / 2);
//                var centerY = $child.position().top + (childHeight / 2);
//                var deltaX = centerX - originX;
//                var deltaY = centerY - originY;

//                var effectiveRotation = rotation;
//                var textObject = $ax.getObjectFromElementId($child.attr('id'));
//                if(textObject) {
//                    if(textObject.style.textRotation) effectiveRotation = textObject.style.textRotation;
//                    else return;
//                }

//                var transform = $ax.utils.Matrix2D.identity().rotate(effectiveRotation);
//                var filter = _filterFromTransform(transform);

//                $child.css('filter', filter)
//                    .width(childWidth + 1)
//                    .height(childHeight + 1);

//                var p = transform.mul($ax.utils.Vector2D(deltaX, deltaY));
//                var ieOffset = getIEOffset(transform, { width: childWidth, height: childHeight });
//                if(!textObject) {
//                    shapeIeOffset = ieOffset;
//                } else {
//                    // This is a close approximation, but not exact
//                    if(diagramObject.style.verticalAlignment != 'top') ieOffset.y -= shapeIeOffset.y + Math.abs(shapeIeOffset.x);
//                }

//                $child.css("margin-left", -ieOffset.x - deltaX + p.x).css("margin-top", -ieOffset.y - deltaY + p.y);
//            });
//        });
//    };

//    var _fixIEStretchBackground = function() {
//        if(Number(BROWSER_VERSION) >= 9) return;
//        var pageStyle = $ax.adaptive.getPageStyle();
//        if(!pageStyle.imageRepeat || pageStyle.imageRepeat == 'auto') return;

//        $('body').css('background-image', 'none');
//        var viewId = $ax.adaptive.currentViewId;
//        var imageInfo = viewId ? $ax.pageData.viewIdToBackgroundImageInfo && $ax.pageData.viewIdToBackgroundImageInfo[viewId] : $ax.pageData.defaultBackgroundImageInfo;
//        if(imageInfo && imageInfo.path) {
//            if($('#bg_img').length == 0) $('body').append('<img id="bg_img"/>');
//            $('#bg_img').attr('src', imageInfo.path).css('position', 'fixed').css('z-index', '-10000');
//            _resizeIEBackground();
//        } else $('#bg_img').remove();
//    };

//    var _resizeIEBackground = function() {
//        if(Number(BROWSER_VERSION) >= 9) return;
//        //var page = $ax.pageData.page;
//        var viewId = $ax.adaptive.currentViewId;
//        var pageStyle = $ax.adaptive.getPageStyle();
//        if(!$ax.pageData.defaultBackgroundImageInfo && !$ax.pageData.viewIdToBackgroundImageInfo) return;
//        var imageInfo = viewId ? $ax.pageData.viewIdToBackgroundImageInfo[viewId] : $ax.pageData.defaultBackgroundImageInfo;
//        if(!imageInfo) return;
//        var imageWidth = imageInfo.width;
//        var imageHeight = imageInfo.height;
//        var windowWidth = $(window).width();
//        var windowHeight = $(window).height();
//        var isCover = pageStyle.imageRepeat == 'cover';

//        var wRatio = windowWidth / imageWidth;
//        var hRatio = windowHeight / imageHeight;
//        var ratio = wRatio;
//        if(isCover) {
//            if(hRatio > wRatio) ratio = hRatio;
//        } else {
//            if(hRatio < wRatio) ratio = hRatio;
//        }
//        var width = imageWidth * ratio;
//        var height = imageHeight * ratio;

//        var left = '0px';
//        if((isCover && width > windowWidth) || (!isCover && width < windowWidth)) {
//            if(pageStyle.imageHorizontalAlignment == 'center') {
//                left = ((windowWidth - width) / 2) + 'px';
//            } else if(pageStyle.imageHorizontalAlignment == 'far') {
//                left = (windowWidth - width) + 'px';
//            }
//        }

//        var top = '0px';
//        if((isCover && height > windowHeight) || (!isCover && height < windowHeight)) {
//            if(pageStyle.imageVerticalAlignment == 'center') {
//                top = ((windowHeight - height) / 2) + 'px';
//            } else if(pageStyle.imageVerticalAlignment == 'far') {
//                top = (windowHeight - height) + 'px';
//            }
//        }

//        $('#bg_img').css('top', top).css('left', left).css('width', width).css('height', height);
//    };

//    var _fixAllPngs = function() {
//        if(!(/MSIE ((5\.5)|6)/.test(window.navigator.userAgent) && window.navigator.platform == "Win32")) return;

//        $('img[src$=".png"]').each(function() {
//            if(!this.complete) {
//                this.onload = function() { $axure.utils.fixPng(this); };
//            } else {
//                $axure.utils.fixPng(this);
//            }
//        });
//    };

//    var _fixInputSize = function() {
//        if(Number(BROWSER_VERSION) >= 8 || window.navigator.userAgent.indexOf("Trident/4.0") > -1) return;
//        var inputs = $('input').not(':input[type=button], :input[type=submit], :input[type=radio], :input[type=checkbox]');
//        inputs.each(function() {
//            var $input = $(this);
//            var axInput = $ax('#' + $input.attr('id'));
//            $input.css('height', (axInput.height() - 4 + 'px')).css('width', (axInput.width() - 2 + 'px'));
//        });

//        var textAreas = $($ax.constants.TEXT_AREA_TYPE);
//        textAreas.each(function() {
//            var $textArea = $(this);
//            var axText = $ax('#' + $textArea.attr('id'));
//            $textArea.css('height', (axText.height() - 6 + 'px')).css('width', (axText.width() - 6 + 'px'));
//        });
//    };

//    var _fixInputBackground = function() {
//        var inputs = $('input').not(':input[type=button], :input[type=submit], :input[type=radio], :input[type=checkbox]');
//        inputs = inputs.add($($ax.constants.TEXT_AREA_TYPE));
//        inputs.each(function() {
//            var $input = $(this);
//            if($input.css('background-color') == 'transparent') {
//                $input.css('background-image', 'url(../../transparent.gif)');
//            } else {
//                $input.css('background-image', '');
//            }
//        });
//    };

//    $(document).ready(function() {
//        _fixIEStretchBackground();
//        _applyIEFixedPosition();
//        $axure.resize(function() {
//            _resizeIEBackground();
//        });
//        $ax.adaptive.bind('viewChanged', function() {
//            _fixIEStretchBackground();
//            _applyBackground();
//            _fixInputBackground();
//        });


//        _fixAllPngs();
//        _applyIERotation();
//        _applyBackground();
//        _fixInputSize();
//        _fixInputBackground();
//    });


//});