public IHTMLElement createElement(string tag) { var n = default(IHTMLElement); if (tag == "div") { n = new IHTMLDiv(); } if (tag == "span") { n = new IHTMLSpan(); } if (tag == "button") { n = new IHTMLButton(); } if (n == null) { throw new NotImplementedException(tag); } createElement(n); return(n); }
public IHTMLElement createElement(string tag) { var n = default(IHTMLElement); if (tag == "div") n = new IHTMLDiv(); if (tag == "span") n = new IHTMLSpan(); if (tag == "button") n = new IHTMLButton(); if (n == null) throw new NotImplementedException(tag); createElement(n); return n; }
public void Initialize(ExternalContext Context) { KnownMoviesFilter = e => true; //Context.Document.title = "2 token: " + Context.PrivateKey; // wtf? we cannot modify body without resetting our flash // http://dojotoolkit.org/forum/dojo-core-dojo-0-9/dojo-core-support/firefox-reloads-flash-when-portion-page-refreshed-using-a //Context.Document.body.style.overflow = "hidden"; //Context.Document.body.style.backgroundColor = "black"; //Context.Document.body.style.color = "white"; #region ContainerForPosters var ContainerForPosters = new IHTMLDiv().AttachTo(Context); ContainerForPosters.style.position = "absolute"; ContainerForPosters.style.width = "100%"; ContainerForPosters.style.height = "100%"; //ContainerForPosters.style.background = "black url('http://www.stripegenerator.com/generators/generate_stripes.php?fore=000000&h=30&w=6&p=7&back1=333333&back2=ff0000>=0&d=0&shadow=0&')"; ContainerForPosters.style.backgroundColor = "black"; ContainerForPosters.style.color = "white"; ContainerForPosters.style.textAlign = "center"; ContainerForPosters.style.overflow = "auto"; #endregion var PostersGroup = new IHTMLDiv().AttachTo(ContainerForPosters); var FooterGroup = new IHTMLDiv().AttachTo(ContainerForPosters); var ButtonsOnRightEdge = new IHTMLSpan().AttachTo(Context); ButtonsOnRightEdge.style.Apply( s => { s.position = "absolute"; s.marginLeft = "-8em"; s.marginTop = "-2em"; s.top = "100%"; s.left = "100%"; } ); ButtonsOnRightEdge.innerHTML = Info.GoogleGadget.AddImage.ToImageMiddle().ToLink(Info.GoogleGadget.AddToYourWebPageLink) + " " + Info.RSSImage.ToImageMiddle().ToLink(Info.BuzzBlogPost); var Toolbar = new IHTMLDiv { innerHTML = "" }.AttachTo(Context); Toolbar.style.Apply( s => { s.position = "absolute"; s.marginTop = "-2em"; s.top = "100%"; s.left = "1em"; } ); #region ToggleScrollbar var ToggleScrollbar = new IHTMLSpan { innerHTML = "» toggle scrollbar" }.AttachTo(Toolbar); ToggleScrollbar.style.Apply( s => { s.border = "1px dotted white"; s.cursor = "pointer"; s.backgroundColor = "black"; s.color = "white"; s.marginLeft = "1em"; } ); var ToggleScrollbarCounter = 0; ToggleScrollbar.onclick += delegate { ToggleScrollbarCounter++; if (ToggleScrollbarCounter % 2 == 0) ContainerForPosters.style.overflow = "auto"; else ContainerForPosters.style.overflow = "hidden"; }; #endregion #region Shadow var Shadow = new IHTMLDiv().AttachTo(Context); Shadow.style.position = "absolute"; Shadow.style.left = "0px"; Shadow.style.top = "0px"; Shadow.style.width = "100%"; Shadow.style.height = "100%"; // http://www.stripegenerator.com/generators/generate_stripes.php?fore=000000&h=30&w=1&p=18&back1=171313&back2=ff0000>=0&d=0&shadow=5& Shadow.style.overflow = "hidden"; // chrome does not support opacity? #endregion Func<string, int, double, IHTMLDiv> AddContainerShadow = (color, margin, opacity) => { var ContainerShadow = new IHTMLDiv().AttachTo(Shadow); ContainerShadow.style.position = "absolute"; ContainerShadow.style.left = "50%"; ContainerShadow.style.top = "50%"; ContainerShadow.style.marginLeft = (-400 - margin) + "px"; ContainerShadow.style.marginTop = (-300 - margin) + "px"; ContainerShadow.style.backgroundColor = color; ContainerShadow.style.width = (800 + margin * 2) + "px"; ContainerShadow.style.height = (600 + margin * 2) + "px"; Action<double> ContainerShadow_set_opacity = value => { ContainerShadow.style.opacity = "" + value; ContainerShadow.style.filter = "Alpha(Opacity=" + Convert.ToInt32(value * 100) + ")"; }; if (opacity < 1.0) ContainerShadow_set_opacity(opacity); return ContainerShadow; }; AddContainerShadow("#000000", 800, 0.5); for (int i = 0; i < 8; i++) { AddContainerShadow("#000000", i * 4, 0.4); } var SuggestionDialog = InitializeSuggestMovie(Context, KnownMovies, Toolbar, Shadow); #region ContainerForVideoPlayer var ContainerForVideoPlayer = new IHTMLDiv().AttachTo(Context); ContainerForVideoPlayer.style.position = "absolute"; ContainerForVideoPlayer.style.left = "50%"; ContainerForVideoPlayer.style.top = "50%"; ContainerForVideoPlayer.style.marginLeft = "-400px"; ContainerForVideoPlayer.style.marginTop = "-300px"; ContainerForVideoPlayer.style.backgroundColor = "black"; ContainerForVideoPlayer.style.width = "800px"; ContainerForVideoPlayer.style.height = "400px"; #endregion #region ContainerForDetails var ContainerForDetails = new IHTMLDiv().AttachTo(Context); ContainerForDetails.style.position = "absolute"; ContainerForDetails.style.left = "50%"; ContainerForDetails.style.top = "50%"; ContainerForDetails.style.marginLeft = "-400px"; ContainerForDetails.style.marginTop = "120px"; //ContainerForDetails.style.backgroundColor = "red"; ContainerForDetails.style.width = "800px"; ContainerForDetails.style.height = "180px"; ContainerForDetails.style.overflow = "auto"; ContainerForDetails.style.color = "white"; // ContainerForDetails.innerHTML = @" //<a href='http://www.imdb.com/title/tt0421715/' title='Movie: The Curious Case of Benjamin Button 2008'><img src='http://tinyurl.com/dh5xay' align='right' /></a> //<h2><a href='http://piratebay.org/torrent/4710971/El.Curioso.Caso.De.Benjamin.Button.[2009].[Spanish].[DVD-Screene'>Movie: The Curious Case of Benjamin Button 2008</a></h2> //<div title='raiting'>8.2/10</div> //<div title='runtime'>166 min, 1.36 GiB</div> //<div title='tagline'>Life isn't measured in minutes, but in moments</div> //<div title='genres'>Drama, Fantasy, Mystery, Romance</div> //<div title='episode'></div> //<a href='http://tinyurl.com/cjhc2g' title='Movie: The Curious Case of Benjamin Button 2008'><img src='http://static.thepiratebay.org/img/dl.gif' /> El.Curioso.Caso.De.Benjamin.Button.[2009].[Spanish].[DVD-Screene</a> //"; #endregion YouTubePlayer.Create(ContainerForVideoPlayer, 0, 0, VideoPlayer => { MovieItem CurrentVideo = null; #region ShowVideo Action<MovieItem> ShowVideo = k => { if (k == null) { VideoPlayer.pauseVideo(); VideoPlayer.width = 0; VideoPlayer.height = 0; ContainerForVideoPlayer.style.top = "-100%"; //ContainerForVideoPlayer.style.display = "none"; Shadow.style.display = "none"; SuggestionDialog.style.display = "none"; ContainerForDetails.style.display = "none"; Context.Document.title = "zmovies"; return; } //ContainerForVideoPlayer.style.display = "block"; ContainerForVideoPlayer.style.top = "50%"; VideoPlayer.width = 800; VideoPlayer.height = 400; if (CurrentVideo == k) { VideoPlayer.playVideo(); } else { CurrentVideo = k; VideoPlayer.loadVideoById(k.YouTubeKey); } Context.Document.title = k.SmartTitle; Shadow.style.display = "block"; ContainerForDetails.style.display = "block"; ContainerForDetails.innerHTML = k.ToDetails(); }; #endregion ShowVideo(null); Shadow.style.cursor = "pointer"; Shadow.onclick += delegate { ShowVideo(null); }; // document.getElementById('" + context.Element.id + "')['" + addfeeditem.Token + @"'](result.feed.entries[i].content); //{ // "title":"Movie: Yes Man 2008", // "link":"http://feedproxy.google.com/~r/zmovies/~3/qVZESWhb0vQ/dfvlm8", // "author":"", // "publishedDate":"", // "contentSnippet":"\n \n \n \n \n \n \n\n\nMovie: Yes Man 2008\n7.2/10\n104 min, 704.11 MiB\nOne word can change everything.\nComedy|Romance\n\n ...", // "content":"\n \n \n \n \u003cembed src\u003d\"http://www.youtube.com/v/Q-Z_CUYh2Sk\u0026amp;hl\u003den\u0026amp;fs\u003d1\" allowScriptAccess\u003d\"never\" allowFullScreen\u003d\"true\" width\u003d\"640\" height\u003d\"385\" wmode\u003d\"transparent\" type\u003d\"application/x-shockwave-flash\"\u003e\u003c/embed\u003e\n \n \n\u003ca href\u003d\"http://www.youtube.com/v/Q-Z_CUYh2Sk\u0026amp;hl\u003den\u0026amp;fs\u003d1\"\u003e\u003cimg alt\u003d\"Q-Z_CUYh2Sk\" src\u003d\"http://img.youtube.com/vi/Q-Z_CUYh2Sk/0.jpg\" align\u003d\"left\"\u003e\u003c/a\u003e\n\u003ca href\u003d\"http://www.imdb.com/title/tt1068680/\" title\u003d\"Movie: Yes Man 2008\"\u003e\u003cimg src\u003d\"http://tinyurl.com/cuc2uo\" align\u003d\"right\"\u003e\u003c/a\u003e\n\u003ch2\u003e\u003ca href\u003d\"http://piratebay.org/torrent/4797620/Yes.Man.2009.DVDRip.XviD-NoRar_\"\u003eMovie: Yes Man 2008\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv title\u003d\"raiting\"\u003e7.2/10\u003c/div\u003e\n\u003cdiv title\u003d\"runtime\"\u003e104 min, 704.11 MiB\u003c/div\u003e\n\u003cdiv title\u003d\"tagline\"\u003eOne word can change everything.\u003c/div\u003e\n\u003cdiv title\u003d\"genres\"\u003eComedy|Romance\u003c/div\u003e\n\u003cdiv title\u003d\"episode\"\u003e\u003c/div\u003e\n\u003ca href\u003d\"http://tinyurl.com/dfvlm8\" title\u003d\"Movie: Yes Man 2008\"\u003e\u003cimg src\u003d\"http://static.thepiratebay.org/img/dl.gif\"\u003e Yes.Man.2009.DVDRip.XviD-NoRar™\u003c/a\u003e\u003cimg src\u003d\"http://feeds2.feedburner.com/~r/zmovies/~4/qVZESWhb0vQ\" height\u003d\"1\" width\u003d\"1\"\u003e", // "categories":[ // "Movies", // "Comedy", // "Romance" // ] // }, VideoPlayer.onStateChange += state => { if (state == YouTubePlayer.States.ended) { ShowVideo(KnownMovies.Where(x => KnownMoviesFilter(x.Movie)).Random().Movie); } }; var PendingList = new List<MovieItem>(); Action PendingListToPosters = delegate { while (PendingList.Count > 0) { var GroupLeader = PendingList.First(); PendingList.Remove(GroupLeader); Func<MovieItem, bool> Filter = k => k.IMDBTagline == GroupLeader.IMDBTagline; if (string.IsNullOrEmpty(GroupLeader.IMDBTagline)) Filter = k => k.SmartTitleWithoutQuotes == GroupLeader.SmartTitleWithoutQuotes; var GroupMembers = PendingList.Where(Filter).ToArray(); GroupMembers.ForEach(k => PendingList.Remove(k)); var Group = new[] { GroupLeader }.Concat(GroupMembers).ToArray(); foreach (var n in Group) { var poster = new IHTMLImage { src = n.PosterLink, alt = " ", title = n.SmartTitleWithoutQuotes + " | " + n.TorrentName + " | " + n.FeedIndex + " of " + n.FeedCapacity }.AttachTo(PostersGroup); if (n != GroupLeader) { poster.style.marginLeft = "-3em"; } KnownMovies.Add( new MovieItemWithPoster { Movie = n, Poster = poster } ); poster.style.cursor = "pointer"; poster.onclick += delegate { ShowVideo(n); }; } } }; var GFeedReader = Context.ToExternal<object[]>( data => { var Title = (string)data[0]; var Link = (string)data[1]; var Content = (string)data[2]; var Categories = (string[])data[3]; var FeedIndex = (int)data[4]; var FeedCapacity = (int)data[5]; Content.ParseMovieItem( n => { // use feedburner link for stats n.TorrentLink = Link; n.FeedIndex = FeedIndex; n.FeedCapacity = FeedCapacity; PendingList.Add(n); if (FeedIndex + 1 == FeedCapacity) PendingListToPosters(); } ); } ); 1.ExternalAtDelay(@" window['piper'] = function (dummy, result) { for (var i=0; i<result.feed.entries.length; i++) { var _x = result.feed.entries[i]; if (_x.content) { var _v = [_x.title, _x.link, _x.content, _x.categories, i, result.feed.entries.length]; document.getElementById('" + Context.Element.id + "')['" + GFeedReader + @"'](_v); } } }; "); // <script src='http://www.google.com/uds/Gfeeds?callback=piper&scoring=h&context=0&num=100&hl=en&output=json&q=http://feeds2.feedburner.com/zmovies&v=1.0&nocache=0'></script> // google seems to cache 250 items new IHTMLScript { type = "text/javascript", src = "http://www.google.com/uds/Gfeeds?callback=piper&scoring=h&context=0&num=250&hl=en&output=json&q=http://feeds2.feedburner.com/zmovies&v=1.0&nocache=0" }.AttachTo(Context); // http://flagcounter.com/ // rect (top, right, bottom, left) FooterGroup.innerHTML = @" <div style='padding: 4em;'> <center> <div style='width:420px;text-align:center;margin:0;padding:0;'> <embed src='http://widgets.amung.us/flash/v2map.swf' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' wmode='transparent' allowScriptAccess='always' allowNetworking='all' type='application/x-shockwave-flash' flashvars='wausitehash=eop2ht6aucqf&map=heatmap&pin=star-blue&link=no' width='420' height='210' /> <div style='width:420px;height:210px;position:relative;margin:0 auto;margin-top:-210px;'><a href='http://whos.amung.us/stats/eop2ht6aucqf/'><img src='http://maps.amung.us/ping/eop2ht6aucqf.gif' border='0' width='420' height='210' /></a></div> </div> </center> <br /> <div> <a href='http://s03.flagcounter.com/more/Y7bi'><img src='http://s03.flagcounter.com/count/Y7bi/bg=000000/txt=FFFFFF/border=CCCCCC/columns=8/maxflags=32/viewers=3/labels=0/pageviews=1/' alt='free counters' border='0'></a> </div> </div> "; } ); }
// change: C:\util\xampplite\apache\conf\httpd.conf // http://localhost/jsc/FlashBrowserDocument/FlashBrowserDocument.htm /* Alias /jsc/FlashBrowserDocument "C:\work\jsc.svn\examples\actionscript\FlashBrowserDocument\FlashBrowserDocument\bin\Release\web" <Directory "C:\work\jsc.svn\examples\actionscript\FlashBrowserDocument\FlashBrowserDocument\bin\Release\web"> Options Indexes FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> */ /// <summary> /// Default constructor /// </summary> public FlashBrowserDocument() { ConsoleFormPackageExperience.Initialize(); Console.WriteLine("ConsoleFormPackageExperience"); var t = new TextField { defaultTextFormat = new TextFormat { font = "Courier" }, backgroundColor = 0x303030, textColor = 0xffff00, text = "powered by jsc", background = true, x = 0, y = 0, alwaysShowSelection = true, width = DefaultWidth, height = DefaultHeight }.AttachTo(this); // you should be running within the browser //SecurityError: Error #2060: Security sandbox violation: ExternalInterface caller file:///C:/work/jsc.svn/examples/actionscript/FlashBrowserDocument/FlashBrowserDocument/bin/Release/web/FlashBrowserDocument.swf cannot access file:///C:/work/jsc.svn/examples/actionscript/FlashBrowserDocument/FlashBrowserDocument/bin/Release/web/FlashBrowserDocument.htm. // at flash.external::ExternalInterface$/_initJS() // at flash.external::ExternalInterface$/addCallback() // at Extensions::ExternalExtensions$/External_100668292() // at DOM::ExternalContext() // at DOM::ExternalContext$/ExternalAuthentication_100663321() // at FlashBrowserDocument.ActionScript::FlashBrowserDocument() t.text = "before ExternalAuthentication"; try { Console.WriteLine("before ExternalAuthentication"); ExternalContext.ExternalAuthentication( context => { Console.WriteLine("at ExternalAuthentication"); t.text = "after ExternalAuthentication"; context.Document.body.style.backgroundColor = "#afafff"; context.Document.body.style.color = "#000080"; t.appendText("\nflash element was found within html document"); context.Document.title = "hello world"; #region hide/show flash element var HideFlashButtonCounter = 0; var HideFlashButton = new IHTMLButton { innerHTML = "hide flash element" }; HideFlashButton.AttachTo(context); HideFlashButton.onclick += delegate { if (HideFlashButtonCounter % 2 == 0) { t.appendText("\nflash element hidden"); context.Element.width = 0; context.Element.height = 0; HideFlashButton.innerHTML = "show flash element"; } else { t.appendText("\nflash element shown"); context.Element.width = DefaultWidth; context.Element.height = DefaultHeight; HideFlashButton.innerHTML = "hide flash element"; } HideFlashButtonCounter++; }; #endregion var Content = @" <hr /> <blockqoute> <h1>This application was written in c# and was compiled to actionscript with <a href='http://jsc.sf.net'>jsc compiler</a>.</h1> <h2>Currently supported browsers:</h2> <ul> <li><img src='http://www.w3schools.com/images/compatible_firefox.gif' />Firefox</li> <li><img src='http://www.w3schools.com/images/compatible_chrome.gif' />Google Chrome</li> <li><img src='http://www.w3schools.com/images/compatible_safari.gif' />Safari</li> <li><img src='http://www.w3schools.com/images/compatible_opera.gif' />Opera</li> </ul> </blockqoute> ".AttachAsDiv(context); var DynamicChild = new IHTMLSpan { innerHTML = "hello world" }.AttachTo(Content); DynamicChild.style.color = "red"; DynamicChild.innerHTML = "click on the image to remove it!"; var DynamicChildImage = new IHTMLImage { title = "jsc diagram", src = "http://jsc.sourceforge.net/jsc.png" }.AttachTo(DynamicChild); DynamicChildImage.style.backgroundColor = "white"; DynamicChildImage.onclick += delegate { Console.WriteLine("at DynamicChildImage onclick"); DynamicChild.removeChild(DynamicChildImage); DynamicChild.innerHTML = "you have removed that image!"; var Undo = new IHTMLButton { innerHTML = "undo" }.AttachTo(DynamicChild); Undo.onclick += delegate { DynamicChildImage.AttachTo(DynamicChild); DynamicChild.removeChild(Undo); }; }; DynamicChild.onclick += delegate { Console.WriteLine("at DynamicChild onclick"); }; } ); } catch (Exception ex) { t.text = "error " + new { ex }; } }