1/** 2 * Share. 3 * 4 * @package acora 5 * @since acora 1.0 6 */ 7 8 (function (window){ 9 'use strict'; 10 var FWDShare = function(holder, title, permalink, images_ar){ 11 var self = this; 12 this.buttonsData_ar = ["copy", "facebook", "twitter", "google+", "LinkedIn", "pinterest"]; 13 this.stageContainer = document.getElementsByTagName("body")[0]; 14 this.buttons_ar = []; 15 this.main_do = null; 16 this.buttonW = 30; 17 this.buttonH = 29; 18 this.stageWidth = 0; 19 this.stageHeight = 0; 20 this.isMobile_bl = FWDUtils.isMobile; 21 22 this.init = function(){ 23 if(holder){ 24 this.setupMainDo(); 25 this.setupButtons(); 26 this.addToContainer(); 27 } 28 this.setupInfo(); 29 } 30 31 // Setup main containers 32 this.setupMainDo = function() { 33 this.main_do = new FWDSDisplayObject("div", "absolute"); 34 this.main_do.getStyle().msTouchAction = "none"; 35 this.stageContainer.appendChild(this.main_do.screen); 36 } 37 38 // Setup info window. 39 this.setupInfo = function(){ 40 this.info = new FWDSDisplayObject("div"); 41 this.info.screen.className = "copy-link"; 42 this.info.setInnerHTML("The link has been copied to clipboard"); 43 this.info.setX(-5e3); 44 document.documentElement.appendChild(this.info.screen); 45 } 46 47 // Setup buttons 48 this.setupButtons = function() { 49 for (var i=0; i<this.buttonsData_ar.length; i++) { 50 var data = this.buttonsData_ar[i]; 51 var icon; 52 if(data == 'facebook'){ 53 icon = " fwdicon fwdicon-facebook"; 54 }else if(data == 'google+'){ 55 icon = " fwdicon fwdicon-google-plus"; 56 }else if(data == 'twitter'){ 57 icon = " fwdicon fwdicon-twitter"; 58 }else if(data == 'pinterest'){ 59 icon = " fwdicon fwdicon-pinterest"; 60 }else if(data == 'LinkedIn'){ 61 icon = " fwdicon fwdicon-linkedin"; 62 }else if(data == 'copy'){ 63 icon = " fwdicon fwdicon-clipboard"; 64 } 65 FWDSSimpleButton.setPrototype(); 66 var button = new FWDSSimpleButton(undefined, 67 undefined, 68 undefined, 69 undefined, 70 undefined, 71 undefined, 72 undefined, 73 "<div class='table-fwds-button'><span class='table-cell-fwds-button" + icon + "'></span></div>", 74 undefined, 75 "FWDSButtonNormalState", 76 "FWDSButtonSelectedState"); 77 button.setX((this.buttonW + 2) * i) 78 button.id = i; 79 this.buttons_ar[i] = button; 80 this.main_do.addChild(button) 81 button.addListener(FWDSSimpleButton.MOUSE_UP, this.buttonCLick) 82 } 83 self.main_do.setWidth(this.buttonW * self.buttons_ar.length); 84 self.main_do.setHeight(this.buttonH); 85 } 86 87 this.buttonCLick = function(e) { 88 var id = e.target.id; 89 90 if("facebook" == self.buttonsData_ar[id]){ 91 self.openPopup("https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(permalink), 700, 450); 92 }else if("twitter" == self.buttonsData_ar[id]){ 93 self.openPopup("https://twitter.com/home?status=" + self.title, 700, 450); 94 }else if("LinkedIn" == self.buttonsData_ar[id]){ 95 self.openPopup("https://www.linkedin.com/shareArticle?mini=true&url=" + permalink + "&title=" + self.title, 700, 450); 96 }else if("google+" == self.buttonsData_ar[id]){ 97 self.openPopup("https://plus.google.com/share?url=" + encodeURIComponent(permalink), 700, 450); 98 }else if("pinterest" == self.buttonsData_ar[id]) { 99 var n = images_ar ? "&media=" + images_ar[0] : ""; 100 self.openPopup("http://pinterest.com/pin/create/link/?url=" + encodeURIComponent(permalink) + n, 700, 450) 101 }else if ("copy" == self.buttonsData_ar[id]) { 102 var el = document.createElement("textarea"); 103 el.value = permalink; 104 el.style = { 105 position: "absolute",
106 left: "-9999px" 107 } 108 document.body.appendChild(el); 109 el.select(); 110 document.execCommand("copy"); 111 document.body.removeChild(el); 112 self.shareBtn = e.e.currentTarget; 113 self.showInfo(self.shareBtn, "The link has been copied to clipboard") 114 } 115 } 116 117 // Show info 118 this.showInfo = function(target, text, n, i) { 119 self.info.setInnerHTML(text); 120 self.ws = FWDUtils.getViewportSize(); 121 self.scrOffset = FWDUtils.getScrollOffsets(); 122 self.globalElX = target.getBoundingClientRect().left + target.offsetWidth; 123 self.globalElY = target.getBoundingClientRect().top; 124 if(n){ 125 self.globalElY = (target.getBoundingClientRect().top + target.getBoundingClientRect().height / 2 + self.info.getHeight() / 2); 126 } 127 var x = self.globalElX - (self.info.getWidth() + target.offsetWidth) / 2; 128 if(x < 0){ 129 x = 0; 130 }else if(x + self.info.getWidth() > self.ws.w){ 131 self = self.ws.w - self.info.getWidth(); 132 } 133 134 self.info.setX(x); 135 self.info.setY(Math.round(self.globalElY + self.scrOffset.y - self.info.getHeight())); 136 var s = "#000", 137 r = "#FFF", 138 a = 1; 139 FWDAnimation.killTweensOf(self.info.screen), self.info.screen.style.opacity = 1, FWDAnimation.to(self.info.screen, .1, { 140 backgroundColor: s, 141 color: r, 142 ease: Sine.easeOut 143 }), FWDAnimation.to(self.info.screen, .1, { 144 backgroundColor: r, 145 color: s, 146 delay: .1, 147 ease: Sine.easeOut 148 }), FWDAnimation.to(self.info.screen, .1, { 149 backgroundColor: s, 150 color: r, 151 delay: .2, 152 ease: Sine.easeOut 153 }), FWDAnimation.to(self.info.screen, .1, { 154 backgroundColor: r, 155 color: s, 156 delay: .3, 157 ease: Sine.easeOut 158 }), FWDAnimation.to(self.info.screen, 2, { 159 opacity: 0, 160 delay: a, 161 onComplete: function() { 162 self.info.setX(-5e3) 163 } 164 }) 165 } 166 // Open popup 167 this.openPopup = function(e, t, n) { 168 var i = parseInt((screen.width - t) / 2), 169 o = parseInt((screen.height - n) / 2); 170 FWDUtils.isMobile ? self.popupWindow = window.open(e) : self.popupWindow = window.open(e, "", "width=" + t + ", height=" + n + ", top=" + o + ", left=" + i) 171 } 172 // Add buttons to main container 173 this.addToContainer = function() { 174 holder.appendChild(this.main_do.screen); 175 this.main_do.getStyle().position = "relative"; 176 this.main_do.setX(0); 177 } 178 this.init(); 179 }; 180 window.FWDShare = FWDShare; 181}(window)); 182 183 /* FWDSSimpleButton */ 184(function (window){ 185var FWDSSimpleButton = function(nImg, 186 sPath, 187 dPath, 188 alwaysShowSelectedPath, 189 useHEXColorsForSkin_bl, 190 normalButtonsColor_str, 191 selectedButtonsColor_str, 192 iconCSSString, 193 showHDIcon, 194 normalCalssName, 195 selectedCalssName 196 ){ 197 198 var self = this; 199 var prototype = FWDSSimpleButton.prototype; 200 201 this.iconCSSString = iconCSSString; 202 this.showHDIcon = showHDIcon; 203 204 this.nImg = nImg; 205 this.sPath_str = sPath; 206 this.dPath_str = dPath; 207 208 self.testButton = Boolean(String(self.iconCSSString).indexOf("download") != -1); 209 210 this.n_do; 211 this.s_sdo; 212 this.d_sdo; 213 214 this.toolTipLabel_str; 215 216 if(this.nImg){ 217 this.totalWidth = this.nImg.width; 218 this.totalHeight = this.nImg.height; 219 self.buttonWidth = self.totalWidth; 220 self.buttonHeight = self.totalHeight; 221 } 222 223
224 this.normalCalssName = normalCalssName; 225 this.selectedCalssName = selectedCalssName; 226 227 this.useHEXColorsForSkin_bl = useHEXColorsForSkin_bl; 228 this.normalButtonsColor_str = normalButtonsColor_str; 229 this.selectedButtonsColor_str = selectedButtonsColor_str; 230 231 this.isShowed_bl = true; 232 this.isSetToDisabledState_bl = false; 233 this.isDisabled_bl = false; 234 this.isDisabledForGood_bl = false; 235 this.isSelectedFinal_bl = false; 236 this.isActive_bl = false; 237 this.isMobile_bl = FWDUtils.isMobile; 238 this.hasPointerEvent_bl = FWDUtils.hasPointerEvent; 239 this.allowToCreateSecondButton_bl = !self.isMobile_bl || self.hasPointerEvent_bl || alwaysShowSelectedPath; 240 this.useFontAwesome_bl = Boolean(this.iconCSSString); 241 242 //##########################################// 243 /* initialize self */ 244 //##########################################// 245 self.init = function(){ 246 if(self.iconCSSString) self.setOverflow('visible'); 247 self.setupMainContainers(); 248 self.setNormalState(); 249 }; 250 251 //##########################################// 252 /* setup main containers */ 253 //##########################################// 254 self.setupMainContainers = function(){ 255 if(self.useFontAwesome_bl){ 256 self.n_do = new FWDSDisplayObject("div"); 257 self.n_do.setInnerHTML(self.iconCSSString); 258 self.addChild(self.n_do); 259 260 if(self.showHDIcon){ 261 var hdImage = new Image(); 262 hdImage.src = "http://www.webdesign-flash.ro/icons/hd.png"; 263 self.hd_do = new FWDUVPDisplayObject("img"); 264 self.hd_do.setScreen(hdImage); 265 self.hd_do.setWidth(7); 266 self.hd_do.setHeight(5); 267 self.setOverflow("visible"); 268 self.addChild(self.hd_do); 269 }; 270 271 self.setFinalSize(); 272 }else{ 273 if(self.useHEXColorsForSkin_bl){ 274 self.n_do = new FWDSDisplayObject("div"); 275 self.n_do.setWidth(self.totalWidth); 276 self.n_do.setHeight(self.totalHeight); 277 self.n_do_canvas = FWDUtils.getCanvasWithModifiedColor(self.nImg, self.normalButtonsColor_str).canvas; 278 self.n_do.screen.appendChild(self.n_do_canvas); 279 self.addChild(self.n_do); 280 }else{ 281 self.n_do = new FWDSDisplayObject("img"); 282 self.n_do.setScreen(self.nImg); 283 self.addChild(self.n_do); 284 } 285 286 if(self.allowToCreateSecondButton_bl){ 287 288 self.img1 = new Image(); 289 self.img1.src = self.sPath_str; 290 var img2 = new Image(); 291 self.sImg = img2; 292 293 if(self.useHEXColorsForSkin_bl){ 294 self.s_sdo = new FWDSDisplayObject("div"); 295 self.s_sdo.setWidth(self.totalWidth); 296 self.s_sdo.setHeight(self.totalHeight); 297 self.img1.onload = function(){ 298 self.s_sdo_canvas = FWDUtils.getCanvasWithModifiedColor(self.img1, self.selectedButtonsColor_str).canvas; 299 self.s_sdo.screen.appendChild(self.s_sdo_canvas); 300 } 301 self.s_sdo.setAlpha(0); 302 self.addChild(self.s_sdo); 303 }else{ 304 self.s_sdo = new FWDUVPDisplayObject("img"); 305 self.s_sdo.setScreen(self.img1); 306 self.s_sdo.setWidth(self.totalWidth); 307 self.s_sdo.setHeight(self.totalHeight); 308 self.s_sdo.setAlpha(0); 309 self.addChild(self.s_sdo); 310 } 311 312 if(self.dPath_str){ 313 img2.src = self.dPath_str; 314 self.d_sdo = new FWDUVPDisplayObject("img"); 315 self.d_sdo.setScreen(img2); 316 self.d_sdo.setWidth(self.totalWidth); 317 self.d_sdo.setHeight(self.totalHeight); 318 self.d_sdo.setX(-100); 319 self.addChild(self.d_sdo); 320 }; 321 self.setWidth(self.totalWidth); 322 self.setHeight(self.totalHeight); 323 } 324 } 325 326 self.setButtonMode(true); 327 self.screen.style.yellowOverlayPointerEvents = "none"; 328 329 if(self.hasPointerEvent_bl){ 330 self.screen.addEventListener("pointerup", self.onMouseUp); 331 self.screen.addEventListener("pointerover", self.onMouseOver); 332 self.screen.addEventListener("pointerout", self.onMouseOut); 333 }else if(self.screen.addEventListener){ 334 if(!self.isMobile_bl){ 335 self.screen.addEventListener("mouseover", self.onMouseOver); 336 self.screen.addEventListener("mouseout", self.onMouseOut); 337 self.screen.addEventListener("mouseup", self.onMouseUp); 338 } 339 self.screen.addEventListener("touchend", self.onMouseUp); 340 } 341 }; 342 343 self.onMouseOver = function(e){
344 self.dispatchEvent(FWDSSimpleButton.SHOW_TOOLTIP, {e:e}); 345 if(self.isDisabledForGood_bl) return; 346 if(!e.pointerType || e.pointerType == e.MSPOINTER_TYPE_MOUSE || e.pointerType == "mouse"){ 347 if(self.isDisabled_bl || self.isSelectedFinal_bl) return; 348 self.dispatchEvent(FWDSSimpleButton.MOUSE_OVER, {e:e}); 349 self.setSelectedState(true); 350 } 351 }; 352 353 self.onMouseOut = function(e){ 354 if(self.isDisabledForGood_bl) return; 355 if(!e.pointerType || e.pointerType == e.MSPOINTER_TYPE_MOUSE || e.pointerType == "mouse"){ 356 if(self.isDisabled_bl || self.isSelectedFinal_bl) return; 357 self.dispatchEvent(FWDSSimpleButton.MOUSE_OUT, {e:e}); 358 self.setNormalState(true); 359 } 360 }; 361 362 self.onMouseUp = function(e){ 363 364 if(self.isDisabledForGood_bl) return; 365 if(e.preventDefault) e.preventDefault(); 366 if(self.isDisabled_bl || e.button == 2) return; 367 368 self.dispatchEvent(FWDSSimpleButton.MOUSE_UP, {e:e}); 369 }; 370 371 self.checkCount = 0; 372 this.setFinalSize = function(){ 373 374 clearInterval(self.checkId_int); 375 if(self.checkCount > 6) return; 376 self.lastWidth = self.n_do.screen.firstChild.offsetWidth; 377 self.checkCount +=1; 378 379 self.checkId_int = setInterval(function(){ 380 self.setFinalSize(); 381 },100); 382 383 if(self.prevWidth == self.lastWidth || self.lastWidth == 0) return; 384 self.setWidth(self.n_do.screen.firstChild.offsetWidth); 385 self.setHeight(self.n_do.screen.firstChild.offsetHeight); 386 self.n_do.setWidth(self.w); 387 self.n_do.setHeight(self.h); 388 self.buttonWidth = self.w; 389 self.buttonHeight = self.h; 390 self.totalWidth = self.w; 391 self.totalHeight = self.h; 392 393 394 if(self.hd_do){ 395 self.hd_do.setX(self.w - self.hd_do.w + 2); 396 self.hd_do.setY( -2); 397 } 398 399 self.prevWidth = self.lastWidth; 400 } 401 402 //##############################// 403 // set select / deselect final. 404 //##############################// 405 self.setSelected = function(){ 406 self.isSelectedFinal_bl = true; 407 if(!self.s_sdo) return; 408 FWDAnimation.killTweensOf(self.s_sdo); 409 FWDAnimation.to(self.s_sdo, .8, {alpha:1, ease:Expo.easeOut}); 410 }; 411 412 self.setUnselected = function(){ 413 self.isSelectedFinal_bl = false; 414 if(!self.s_sdo) return; 415 FWDAnimation.to(self.s_sdo, .8, {alpha:0, delay:.1, ease:Expo.easeOut}); 416 }; 417 418 //####################################// 419 /* Set normal / selected state */ 420 //####################################// 421 this.setNormalState = function(animate){ 422 if(self.doNotallowToSetNormal) return; 423 if(self.useFontAwesome_bl){ 424 FWDAnimation.killTweensOf(self.n_do.screen); 425 if(animate){ 426 FWDAnimation.to(self.n_do.screen, .8, {className:self.normalCalssName, ease:Expo.easeOut}); 427 }else{ 428 self.n_do.screen.className = self.normalCalssName; 429 } 430 }else{ 431 FWDAnimation.killTweensOf(self.s_sdo); 432 FWDAnimation.to(self.s_sdo, .5, {alpha:0, ease:Expo.easeOut}); 433 } 434 }; 435 436 this.setSelectedState = function(animate){ 437 if(self.useFontAwesome_bl){ 438 FWDAnimation.killTweensOf(self.n_do.screen); 439 if(animate){ 440 FWDAnimation.to(self.n_do.screen, .8, {className:self.selectedCalssName, ease:Expo.easeOut}); 441 }else{ 442 self.n_do.screen.className = self.selectedCalssName; 443 } 444 }else{ 445 FWDAnimation.killTweensOf(self.s_sdo); 446 FWDAnimation.to(self.s_sdo, .5, {alpha:1, delay:.1, ease:Expo.easeOut}); 447 } 448 }; 449 450 //####################################// 451 /* Disable / enable */ 452 //####################################// 453 this.setDisabledState = function(){ 454 if(self.isSetToDisabledState_bl) return; 455 self.isSetToDisabledState_bl = true; 456 if(self.d_sdo) self.d_sdo.setX(0); 457 if(self.hd_do) self.hd_do.setX(self.w - self.hd_do.w); 458 }; 459 460 this.setEnabledState = function(){ 461 if(!self.isSetToDisabledState_bl) return; 462 self.isSetToDisabledState_bl = false; 463 if(self.d_sdo) self.d_sdo.setX(-100); 464 if(self.hd_do) self.hd_do.setX(-100000); 465 }; 466 467 this.disable = function(){ 468 if(self.isDisabledForGood_bl || self.isDisabled_bl) return; 469 self.isDisabled_bl = true; 470 self.setButtonMode(false); 471 FWDAnimation.killTweensOf(self); 472 FWDAnimation.to(self, .6, {alpha:.4}); 473 self.setNormalState(true); 474 }; 475 476 this.enable = function(){ 477 if(self.isDisabledForGood_bl || !self.isDisabled_bl) return; 478 self.isDisabled_bl = false; 479 self.setButtonMode(true); 480 FWDAnimation.killTweensOf(self); 481 FWDAnimation.to(self, .6, {alpha:1}); 482 }; 483 484 this.disableForGood = function(){ 485 self.isDisabledForGood_bl = true; 486 self.setButtonMode(false); 487 }; 488 489 this.showDisabledState = function(){ 490 if(self.d_sdo) if(self.d_sdo.x != 0) self.d_sdo.setX(0); 491 if(self.hd_do) self.hd_do.setX(self.w - self.hd_do.w + 2); 492 }; 493 494 this.hideDisabledState = function(){ 495 if(self.d_sdo) if(self.d_sdo.x != -100) self.d_sdo.setX(-100); 496 if(self.hd_do) self.hd_do.setX(-10000); 497 }; 498 499 500 //#####################################// 501 /* show / hide */ 502 //#####################################// 503 this.show = function(){ 504 if(self.isShowed_bl) return; 505 self.isShowed_bl = true; 506 507 FWDAnimation.killTweensOf(self); 508 if(!FWDUtils.isIEAndLessThen9){ 509 if(FWDUtils.isIEWebKit){ 510 FWDAnimation.killTweensOf(self.n_do); 511 self.n_do.setScale2(0); 512 FWDAnimation.to(self.n_do, .8, {scale:1, delay:.4, onStart:function(){self.setVisible(true);}, ease:Elastiself.easeOut}); 513 }else{ 514 self.setScale2(0); 515 FWDAnimation.to(self, .8, {scale:1, delay:.4, onStart:function(){self.setVisible(true);}, ease:Elastiself.easeOut}); 516 } 517 }else if(FWDUtils.isIEAndLessThen9){ 518 self.setVisible(true); 519 }else{ 520 self.setAlpha(0); 521 FWDAnimation.to(self, .4, {alpha:1, delay:.4}); 522 self.setVisible(true); 523 } 524 }; 525 526 this.hide = function(animate){ 527 if(!self.isShowed_bl) return; 528 self.isShowed_bl = false; 529 FWDAnimation.killTweensOf(self); 530 FWDAnimation.killTweensOf(self.n_do); 531 self.setVisible(false); 532 }; 533 534 //##########################################// 535 /* Update HEX color of a canvaas */ 536 //##########################################// 537 self.updateHEXColors = function(normalColor_str, selectedColor_str){ 538 FWDUtils.changeCanvasHEXColor(self.nImg, self.n_do_canvas, normalColor_str); 539 FWDUtils.changeCanvasHEXColor(self.img1, self.s_sdo_canvas, selectedColor_str); 540 } 541 542 self.init(); 543 }; 544 545 /* set prototype */ 546 FWDSSimpleButton.setPrototype = function(){ 547 FWDSSimpleButton.prototype = null; 548 FWDSSimpleButton.prototype = new FWDSDisplayObject("div"); 549 }; 550 551 FWDSSimpleButton.CLICK = "onClick"; 552 FWDSSimpleButton.MOUSE_OVER = "onMouseOver"; 553 FWDSSimpleButton.SHOW_TOOLTIP = "showTooltip"; 554 FWDSSimpleButton.MOUSE_OUT = "onMouseOut"; 555 FWDSSimpleButton.MOUSE_UP = "onMouseDown"; 556 557 FWDSSimpleButton.prototype = null; 558 window.FWDSSimpleButton = FWDSSimpleButton; 559}(window)); 560 561 /* Display object */ 562(function (window){ 563 'use strict'; 564 /* 565 * @ type values: div, img. 566 * @ positon values: relative, absolute. 567 * @ positon values: hidden. 568 * @ display values: block, inline-block, self applies only if the position is relative. 569 */ 570 var FWDSDisplayObject = function(type, position, overflow, display){ 571 572 var self = this; 573 self.listeners = {events_ar:[]}; 574 575 if(type == "div" || type == "img" || type == "canvas" || "input"){ 576 self.type = type; 577 }else{
578 throw Error("Type is not valid! " + type); 579 } 580 581 this.children_ar = []; 582 this.style; 583 this.screen; 584 this.transform; 585 this.position = position || "absolute"; 586 this.overflow = overflow || "hidden"; 587 this.display = display || "inline-block"; 588 this.visible = true; 589 this.buttonMode; 590 this.x = 0; 591 this.y = 0; 592 this.w = 0; 593 this.h = 0; 594 this.rect; 595 this.alpha = 1; 596 this.innerHTML = ""; 597 this.opacityType = ""; 598 this.isHtml5_bl = false; 599 600 this.hasTransform3d_bl = FWDUtils.hasTransform3d; 601 this.hasTransform2d_bl = FWDUtils.hasTransform2d; 602 if(FWDUtils.isFirefox || FWDUtils.isIE) self.hasTransform3d_bl = false; 603 if(FWDUtils.isFirefox || FWDUtils.isIE) self.hasTransform2d_bl = false; 604 this.hasBeenSetSelectable_bl = false; 605 606 //##############################// 607 /* init */ 608 //#############################// 609 self.init = function(){ 610 self.setScreen(); 611 }; 612 613 //######################################// 614 /* check if it supports transforms. */ 615 //######################################// 616 self.getTransform = function() { 617 var properties = ['transform', 'msTransform', 'WebkitTransform', 'MozTransform', 'OTransform']; 618 var p; 619 while (p = properties.shift()) { 620 if (typeof self.screen.style[p] !== 'undefined') { 621 return p; 622 } 623 } 624 return false; 625 }; 626 627 //######################################// 628 /* set opacity type */ 629 //######################################// 630 self.getOpacityType = function(){ 631 var opacityType; 632 if (typeof self.screen.style.opacity != "undefined") {//ie9+ 633 opacityType = "opacity"; 634 }else{ //ie8 635 opacityType = "filter"; 636 } 637 return opacityType; 638 }; 639 640 //######################################// 641 /* setup main screen */ 642 //######################################// 643 self.setScreen = function(element){ 644 if(self.type == "img" && element){ 645 self.screen = null; 646 self.screen = element; 647 self.setMainProperties(); 648 }else{ 649 self.screen = document.createElement(self.type); 650 self.setMainProperties(); 651 } 652 }; 653 654 //########################################// 655 /* set main properties */ 656 //########################################// 657 self.setMainProperties = function(){ 658 659 self.transform = self.getTransform(); 660 self.setPosition(self.position); 661 self.setOverflow(self.overflow); 662 self.opacityType = self.getOpacityType(); 663 664 if(self.opacityType == "opacity") self.isHtml5_bl = true; 665 666 if(self.opacityType == "filter") self.screen.style.filter = "inherit"; 667 self.screen.style.left = "0px"; 668 self.screen.style.top = "0px"; 669 self.screen.style.margin = "0px"; 670 self.screen.style.padding = "0px"; 671 self.screen.style.maxWidth = "none"; 672 self.screen.style.maxHeight = "none"; 673 self.screen.style.border = "none"; 674 self.screen.style.lineHeight = "1"; 675 self.screen.style.backfaceVisibility = "hidden"; 676 self.screen.style.webkitBackfaceVisibility = "hidden"; 677 self.screen.style.MozBackfaceVisibility = "hidden"; 678 679 if(type == "img"){ 680 self.setWidth(self.screen.width); 681 self.setHeight(self.screen.height); 682 } 683 }; 684 685 self.setBackfaceVisibility = function(){ 686 self.screen.style.backfaceVisibility = "visible"; 687 self.screen.style.webkitBackfaceVisibility = "visible"; 688 self.screen.style.MozBackfaceVisibility = "visible"; 689 }; 690 691 //###################################################// 692 /* set / get various peoperties.*/ 693 //###################################################// 694 self.setSelectable = function(val){ 695 696 if(!val){ 697 self.screen.style.userSelect = "none"; 698 self.screen.style.MozUserSelect = "none"; 699 self.screen.style.webkitUserSelect = "none"; 700 self.screen.style.khtmlUserSelect = "none"; 701 self.screen.style.oUserSelect = "none"; 702 self.screen.style.msUserSelect = "none"; 703 self.screen.msUserSelect = "none"; 704 self.screen.ondragstart = function(e){return false;}; 705 self.screen.onselectstart = function(){return false;}; 706 self.screen.ontouchstart = function(){return false;}; 707 self.screen.style.webkitTouchCallout='none'; 708 self.hasBeenSetSelectable_bl = true; 709 }else{ 710 if(FWDUtils.isFirefox || FWDUtils.isIE){ 711 self.screen.style.userSelect = "element"; 712 self.screen.style.MozUserSelect = "element"; 713 self.screen.style.msUserSelect = "element"; 714 }else if(FWDUtils.isSafari){ 715 self.screen.style.userSelect = "text"; 716 self.screen.style.webkitUserSelect = "text"; 717 }else{ 718 self.screen.style.userSelect = "auto"; 719 self.screen.style.webkitUserSelect = "auto"; 720 } 721 722 self.screen.style.khtmlUserSelect = "auto"; 723 self.screen.style.oUserSelect = "auto"; 724 725 if(FWDUtils.isIEAndLessThen9){ 726 self.screen.ondragstart = null; 727 self.screen.onselectstart = null; 728 self.screen.ontouchstart = null; 729 }else{ 730 self.screen.ondragstart = undefined; 731 self.screen.onselectstart = undefined; 732 self.screen.ontouchstart = undefined; 733 } 734 735 self.screen.style.webkitTouchCallout='default'; 736 self.hasBeenSetSelectable_bl = false; 737 } 738 739 }; 740 741 self.getScreen = function(){ 742 return self.screen;
743 }; 744 745 self.setVisible = function(val){ 746 self.visible = val; 747 if(self.visible == true){ 748 self.screen.style.visibility = "visible"; 749 }else{ 750 self.screen.style.visibility = "hidden"; 751 } 752 }; 753 754 self.getVisible = function(){ 755 return self.visible; 756 }; 757 758 self.setResizableSizeAfterParent = function(){ 759 self.screen.style.width = "100%"; 760 self.screen.style.height = "100%"; 761 }; 762 763 self.getStyle = function(){ 764 return self.screen.style; 765 }; 766 767 self.setOverflow = function(val){ 768 self.overflow = val; 769 self.screen.style.overflow = self.overflow; 770 }; 771 772 self.setPosition = function(val){ 773 self.position = val; 774 self.screen.style.position = self.position; 775 }; 776 777 self.setDisplay = function(val){ 778 self.display = val; 779 self.screen.style.display = self.display; 780 }; 781 782 self.setButtonMode = function(val){ 783 self.buttonMode = val; 784 if(self.buttonMode == true){ 785 self.screen.style.cursor = "pointer"; 786 }else{ 787 self.screen.style.cursor = "default"; 788 } 789 }; 790 791 self.setBkColor = function(val){ 792 self.screen.style.backgroundColor = val; 793 }; 794 795 self.setInnerHTML = function(val){ 796 self.innerHTML = val; 797 self.screen.innerHTML = self.innerHTML; 798 }; 799 800 self.getInnerHTML = function(){ 801 return self.innerHTML; 802 }; 803 804 self.getRect = function(){ 805 return self.screen.getBoundingClientRect(); 806 }; 807 808 self.setAlpha = function(val){ 809 self.alpha = val; 810 if(self.opacityType == "opacity"){ 811 self.screen.style.opacity = self.alpha; 812 }else if(self.opacityType == "filter"){ 813 self.screen.style.filter = "alpha(opacity=" + self.alpha * 100 + ")"; 814 self.screen.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + Math.round(self.alpha * 100) + ")"; 815 } 816 }; 817 818 self.getAlpha = function(){ 819 return self.alpha; 820 }; 821 822 self.getRect = function(){ 823 return self.screen.getBoundingClientRect(); 824 }; 825 826 self.getGlobalX = function(){ 827 return self.getRect().left; 828 }; 829 830 self.getGlobalY = function(){ 831 return self.getRect().top; 832 }; 833 834 self.setX = function(val){ 835 self.x = val; 836 if(self.hasTransform3d_bl){ 837 self.screen.style[self.transform] = 'translate3d(' + self.x + 'px,' + self.y + 'px,0)'; 838 }else if(self.hasTransform2d_bl){ 839 self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)'; 840 }else{ 841 self.screen.style.left = self.x + "px"; 842 } 843 }; 844 845 self.getX = function(){ 846 return self.x; 847 }; 848 849 self.setY = function(val){ 850 self.y = val; 851 if(self.hasTransform3d_bl){ 852 self.screen.style[self.transform] = 'translate3d(' + self.x + 'px,' + self.y + 'px,0)'; 853 }else if(self.hasTransform2d_bl){ 854 self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)'; 855 }else{ 856 self.screen.style.top = self.y + "px"; 857 } 858 }; 859 860 self.getY = function(){ 861 return self.y; 862 }; 863 864 self.setWidth = function(val){ 865 self.w = val; 866 if(self.type == "img"){ 867 self.screen.width = self.w; 868 self.screen.style.width = self.w + "px"; 869 }else{ 870 self.screen.style.width = self.w + "px"; 871 } 872 }; 873 874 self.getWidth = function(){ 875 if(self.type == "div" || self.type == "input"){ 876 if(self.screen.offsetWidth != 0) return self.screen.offsetWidth; 877 return self.w; 878 }else if(self.type == "img"){ 879 if(self.screen.offsetWidth != 0) return self.screen.offsetWidth; 880 if(self.screen.width != 0) return self.screen.width; 881 return self._w; 882 }else if( self.type == "canvas"){ 883 if(self.screen.offsetWidth != 0) return self.screen.offsetWidth; 884 return self.w; 885 } 886 }; 887 888 self.setHeight = function(val){ 889 self.h = val; 890 if(self.type == "img"){ 891 self.screen.height = self.h; 892 self.screen.style.height = self.h + "px"; 893 }else{ 894 self.screen.style.height = self.h + "px"; 895 } 896 }; 897 898 self.getHeight = function(){ 899 if(self.type == "div" || self.type == "input"){ 900 if(self.screen.offsetHeight != 0) return self.screen.offsetHeight; 901 return self.h; 902 }else if(self.type == "img"){ 903 if(self.screen.offsetHeight != 0) return self.screen.offsetHeight; 904 if(self.screen.height != 0) return self.screen.height; 905 return self.h; 906 }else if(self.type == "canvas"){ 907 if(self.screen.offsetHeight != 0) return self.screen.offsetHeight; 908 return self.h; 909 } 910 }; 911 912 //#####################################// 913 /* DOM list */ 914 //#####################################// 915 self.addChild = function(e){
916 if(self.contains(e)){ 917 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 1); 918 self.children_ar.push(e); 919 self.screen.appendChild(e.screen); 920 }else{ 921 self.children_ar.push(e); 922 self.screen.appendChild(e.screen); 923 } 924 }; 925 926 self.removeChild = function(e){ 927 if(self.contains(e)){ 928 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 1); 929 self.screen.removeChild(e.screen); 930 }else{ 931 //console.log(arguments.callee.caller.toString()) 932 throw Error("##removeChild()## Child dose't exist, it can't be removed!"); 933 }; 934 }; 935 936 self.contains = function(e){ 937 if(FWDUtils.indexOfArray(self.children_ar, e) == -1){ 938 return false; 939 }else{ 940 return true; 941 } 942 }; 943 944 self.addChildAt = function(e, index){ 945 if(self.getNumChildren() == 0){ 946 self.children_ar.push(e); 947 self.screen.appendChild(e.screen); 948 }else if(index == 1){ 949 self.screen.insertBefore(e.screen, self.children_ar[0].screen); 950 self.screen.insertBefore(self.children_ar[0].screen, e.screen); 951 if(self.contains(e)){ 952 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 1, e); 953 }else{ 954 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 0, e); 955 } 956 }else{ 957 if(index < 0 || index > self.getNumChildren() -1) throw Error("##getChildAt()## Index out of bounds!"); 958 959 self.screen.insertBefore(e.screen, self.children_ar[index].screen); 960 if(self.contains(e)){ 961 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 1, e); 962 }else{ 963 self.children_ar.splice(FWDUtils.indexOfArray(self.children_ar, e), 0, e); 964 } 965 } 966 }; 967 968 self.getChildAt = function(index){ 969 if(index < 0 || index > self.getNumChildren() -1) throw Error("##getChildAt()## Index out of bounds!"); 970 if(self.getNumChildren() == 0) throw Error("##getChildAt## Child dose not exist!"); 971 return self.children_ar[index]; 972 }; 973 974 self.getChildIndex = function(child){ 975 if(self.contains(child)){ 976 return FWDUtils.indexOfArray(self.children_ar, child); 977 } 978 return 0; 979 }; 980 981 self.removeChildAtZero = function(){ 982 self.screen.removeChild(self.children_ar[0].screen); 983 self.children_ar.shift(); 984 }; 985 986 self.getNumChildren = function(){ 987 return self.children_ar.length; 988 }; 989 990 991 //################################// 992 /* event dispatcher */ 993 //#################################// 994 self.addListener = function (type, listener){ 995 996 if(type == undefined) throw Error("type is required."); 997 if(typeof type === "object") throw Error("type must be of type String."); 998 if(typeof listener != "function") throw Error("listener must be of type Function."); 999 1000 1001 var event = {}; 1002 event.type = type; 1003 event.listener = listener; 1004 event.target = this; 1005 this.listeners.events_ar.push(event); 1006 }; 1007 1008 self.dispatchEvent = function(type, props){ 1009 if(this.listeners == null) return; 1010 if(type == undefined) throw Error("type is required."); 1011 if(typeof type === "object") throw Error("type must be of type String."); 1012 1013 for (var i=0, len=this.listeners.events_ar.length; i < len; i++){ 1014 if(this.listeners.events_ar[i].target === this && this.listeners.events_ar[i].type === type){ 1015 if(props){ 1016 for(var prop in props){ 1017 this.listeners.events_ar[i][prop] = props[prop]; 1018 } 1019 } 1020 this.listeners.events_ar[i].listener.call(this, this.listeners.events_ar[i]); 1021 } 1022 } 1023 }; 1024 1025 self.removeListener = function(type, listener){ 1026 1027 if(type == undefined) throw Error("type is required."); 1028 if(typeof type === "object") throw Error("type must be of type String."); 1029 if(typeof listener != "function") throw Error("listener must be of type Function." + type); 1030 1031 for (var i=0, len=this.listeners.events_ar.length; i < len; i++){ 1032 if(this.listeners.events_ar[i].target === this 1033 && this.listeners.events_ar[i].type === type 1034 && this.listeners.events_ar[i].listener === listener 1035 ){ 1036 this.listeners.events_ar.splice(i,1); 1037 break; 1038 } 1039 } 1040 }; 1041 1042 /* init */ 1043 self.init(); 1044 }; 1045 1046 window.FWDSDisplayObject = FWDSDisplayObject; 1047}(window));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.