JAVASCRIPT   8

ref.js

Guest on 19th July 2021 04:36:38 PM

  1. var $hilighted,
  2.         $hilightedMenuItem,
  3.         optionDictionary = {},
  4.         names = [],
  5.         buildApiOffline,
  6.         initOffline,
  7.         offline = {},
  8.         API = {},
  9.         buildPage;
  10.  
  11. function loadScript(url, callback) {
  12.         //http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/
  13.         var script = document.createElement("script");
  14.         script.type = "text/javascript";
  15.         if (script.readyState){  //IE
  16.                 script.onreadystatechange = function(){
  17.                         if (script.readyState == "loaded" ||
  18.                                         script.readyState == "complete"){
  19.                                 script.onreadystatechange = null;
  20.                                 callback();
  21.                         }
  22.                 };
  23.         } else {  //Others
  24.                 script.onload = function() {
  25.                         callback();
  26.                 };
  27.         }
  28.  
  29.         script.src = url;
  30.         document.getElementsByTagName("head")[0].appendChild(script);
  31. }
  32.  
  33. function toDot (id){
  34.         return id.replace(/[-]+/g,'.');
  35. };
  36.  
  37. function escapeHTML(html) {
  38.         if (typeof html === 'string') {
  39.                 html = html
  40.                         .replace('\u25CF', '\\u25CF')
  41.                         .replace(/</g, '&lt;')
  42.                         .replace(/>/g, '&gt;');
  43.         }
  44.         return html;
  45. }
  46.  
  47. function escapeSelector (name) {
  48.         return name.replace('<', '\\<').replace('>', '\\>');
  49. }
  50.  
  51. function activateInternalLinks($parent) {
  52.         $('a[href^="#"]', $parent).each(function (i, anchor) {
  53.                 $(anchor).click(function () {
  54.                         gotoSection(anchor.href.split('#')[1], true);
  55.                         return false;
  56.                 });
  57.         });
  58. }
  59.  
  60.  
  61. /**
  62.  * Highligth a specific option by coloring it in the menu view and section view
  63.  */
  64. function hilight (id) {
  65.         var linkId, $el, $detailsWrap = $('#details-wrap');
  66.  
  67.         $el = $('div.member#' + escapeSelector(id));
  68.  
  69.         // clear old
  70.         if ($hilighted) {
  71.                 $hilighted.removeClass('hilighted');
  72.         }
  73.         if ($hilightedMenuItem) {
  74.                 $hilightedMenuItem.removeClass('hilighted');
  75.         }
  76.  
  77.         if ($el.length === 0) {
  78.                 $detailsWrap.scrollTop(0);
  79.         } else {
  80.                 // hilight new
  81.                 $hilighted = $el;
  82.                 $hilighted.addClass('hilighted');
  83.                 $detailsWrap.scrollTop($hilighted.offset().top + $detailsWrap.scrollTop() - 160);
  84.         }
  85.         linkId = id.replace(/[^a-z0-9<>\\]+/gi,'.');
  86.  
  87.         $hilightedMenuItem = $('a[href="#'+ linkId +'"]').not('.plus');
  88.         $hilightedMenuItem.addClass('hilighted');
  89.  
  90. }
  91.  
  92. /**
  93.  * Expand and load children when necessary of current level
  94.  */
  95. function toggleExpand($elem, callback) {
  96.         var $_menu = $elem.find('div[id$="-menu"]').first(),
  97.                 _id = $_menu.attr('id').replace("-menu",""),
  98.                 displayChildrenCallback = function () {
  99.  
  100.                         $('.dots', $elem).removeClass('loading');
  101.                         $elem.removeClass("collapsed");
  102.                         $elem.addClass("expanded");
  103.                         $_menu.slideDown();
  104.                         // show relevant section
  105.  
  106.                         if (/[A-Z]/.test(_id[0])) {
  107.                                 _id = 'object-' + _id;
  108.                         }
  109.                         toggleSection(_id);
  110.  
  111.                         if (callback) {
  112.                                 callback();
  113.                         }
  114.  
  115.                 };
  116.  
  117.  
  118.         if ($elem.hasClass('collapsed')) {
  119.  
  120.                 /* if not loaded, load children, standard we have three children */
  121.                 if ($_menu.children().size() == 1) {
  122.                         $('.dots', $elem).addClass('loading');
  123.                         loadChildren(_id, false, displayChildrenCallback);
  124.  
  125.                 } else {
  126.                         displayChildrenCallback();
  127.                 }
  128.         } else {
  129.                 // hide children
  130.                 $_menu.slideUp('normal',function(){
  131.                         $elem.removeClass("expanded");
  132.                         $elem.addClass("collapsed");
  133.                 });
  134.         }
  135. };
  136.  
  137. function toggleSection(sectionId) {
  138.         $section = $("#details > div.section:visible");
  139.  
  140.         // hide current section
  141.         if($section){
  142.                 $section.hide();
  143.         }
  144.         if (/[^\\]</.test(sectionId)) {
  145.                 sectionId = sectionId.replace('<', '\\<').replace('>', '\\>');
  146.         }
  147.         $('#details > div.section#' + sectionId).show();
  148. }
  149.  
  150.  
  151. function addSectionOption(val){
  152.         $section = $('<div class="section" id="' + val.name + '" style="display:none;"></div>').appendTo('#details');
  153.         $('<h1>' + val.fullname.replace('<', '&lt;').replace('>', '&gt;') + '</h1>'
  154.         + (val.description ? '<div class="section-description">' + val.description + '</div>': '')
  155.         + (val.demo ? '<div class="demo"><h4>Try it:</h4> ' + val.demo + '</div>': '' )).appendTo($section);
  156.  
  157.         activateInternalLinks($section);
  158.         $(document).triggerHandler({ type:"xtra.btn.section.event",id: optionDictionary[val.fullname], table: 'option' });
  159. }
  160.  
  161. function addSectionObject(val){
  162.         $section = $('<div class="section" id="object-' + val.name + '" style="display:none;"></div>').appendTo('#details');
  163.         $('<h1>' + val.title + '</h1>').appendTo($section);
  164.         $('<div class="section-description">' + val.description + '</div>').appendTo($section);
  165.  
  166.         activateInternalLinks($section);
  167.         $(document).triggerHandler({ type:"xtra.btn.section.event",id: 'object-'+ val.name, table: 'object'});
  168. }
  169.  
  170. function markupReturnType(s) {
  171.         s = s.replace(/[<>]/g, function (a) {
  172.                 return {
  173.                         '<': '&lt;',
  174.                         '>': '&gt;'
  175.                 }[a];
  176.         });
  177.         s = s.replace(/(Axis|Chart|Element|Highcharts|Point|Renderer|Series)/g, '<a href="#$1">$1</a>');
  178.         return s;
  179. }
  180.  
  181. function loadOptionMemberInSection(obj, isParent){
  182.         //add member to section in div#details
  183.         var $_section = $('div#' + obj.parent.replace('<', '\\<').replace('>', '\\>') + '.section'),
  184.                 $_inheritedLink,
  185.                 $memberDiv,
  186.                 contextClass = obj.description && obj.description.indexOf('<p>') > -1 ? '' : ' context';
  187.  
  188.         $memberDiv = $('<div class="member" id="' + obj.name + '"><span class="title">' + obj.title + '</span>'
  189.                         + (obj.returnType ? '<span class="returnType">: ' + markupReturnType(obj.returnType) + '</span>' : '')
  190.                         + (obj.deprecated ? '<div class="deprecated"><p>Deprecated</p></div>' : '' )
  191.                         + (obj.since ? '<div class="since">Since ' + obj.since + '</div>' : '' )
  192.                         + (obj.description ? '<div class="description">' + obj.description
  193.                                         + (obj.defaults ? ' Defaults to <code>' + escapeHTML(obj.defaults) + '</code>.'  : '')
  194.                                         + '</div>' : '')
  195.                         + (obj.context ? '<div class="description' + contextClass + '">The <code>this</code> keyword refers to the '+ markupReturnType(obj.context) +' object.</div>' : '')
  196.                         + (obj.demo ? '<div class="demo"><h4>Try it:</h4> ' + obj.demo + '</div>': '' )
  197.                         + (obj.seeAlso ? '<div class="seeAlso">See also: ' + obj.seeAlso + '</div>': '' )
  198.                         + '</div>').appendTo($_section);
  199.  
  200.         activateInternalLinks($memberDiv);
  201.  
  202.         if (isParent) {
  203.                 $('div#' + escapeSelector(obj.name) + '.member span.title').html(function() {
  204.                         var title = $.trim($(this).text());
  205.                         return $('<a href="#' + obj.fullname + '">' + title + '</a>').click(function(){
  206.                                 gotoSection(obj.fullname, true);
  207.                         });
  208.                 });
  209.         }
  210. }
  211.  
  212. function loadObjectMemberInSection(obj) {
  213.         $memberDiv = $('<div class="member" id="' + obj.name + '">'
  214.                         + '<span class="title">' + obj.title + '</span> '
  215.                         + (obj.params ? '<span class="parameters">' + obj.params + '</span>' : '')
  216.                         + (obj.since ? '<div class="since">Since ' + obj.since + '</div>' : '' )
  217.                         + (obj.deprecated ? '<div class="deprecated"><p>Deprecated</p></div>' : '' )
  218.                         + '<div class="description"><p>' + obj.description +  '</p>'
  219.                         + (obj.paramsDescription ? '<h4>Parameters</h4><ul id="paramdesc"><li>' +
  220.                                         obj.paramsDescription.replace(/\|\|/g,'</li><li>') + '</li></ul>' : '')
  221.                         + (obj.returnType ? '<h4>Returns</h4><ul id="returns"><li>' + markupReturnType(obj.returnType) + '</li></ul>' : '')
  222.                         + '</div>'
  223.                         + (obj.demo ? '<div class="demo"><h4>Try it:</h4> ' + obj.demo + '</div>': '' )
  224.                         + '</div>').appendTo('div#object-' + obj.parent + '.section');
  225.  
  226.         activateInternalLinks($memberDiv);
  227. }
  228.  
  229. function loadChildren(name, silent, callback) {
  230.  
  231.         var isObject = /[A-Z]/.test(name[0]),
  232.                 url = isObject ?
  233.                         'object/'+ PRODUCTNAME + '-obj/child/' + name :
  234.                         'option/'+ PRODUCTNAME + '/child/' + name;
  235.  
  236.         $.ajax({
  237.                 type: "GET",
  238.                 url: url,
  239.                 dataType: "json",
  240.                 error: function () {
  241.                         var $menu;
  242.                         $menu = $('div#' + escapeSelector(name) + '-menu');
  243.                         $('.dots', $menu.parent()).removeClass('loading').addClass('error').html('Error');
  244.                 },
  245.                 success: function (data) {
  246.                         var display = 'block',
  247.                         display, $menu, $menuItem;
  248.  
  249.                         if (silent){
  250.                                 display = 'none';
  251.                         }
  252.  
  253.                         name = name.replace('<', '\\<').replace('>', '\\>');
  254.                         $menu = $('div#' + name + '-menu');
  255.  
  256.  
  257.                         $.each(data, function (key, val) {
  258.                                 var $div = $('<div></div>').appendTo($menu), $plus, $menuLink, parts,
  259.                                 tie, dottedName, internalName,
  260.                                 name,
  261.                                 title,
  262.                                 defaults,
  263.                                 cls;
  264.  
  265.                                 /*if (val.type === 'method') {
  266.                                         name = val.name.replace('--', '.') + '()';
  267.                                 } else if (val.type === 'property') {
  268.                                         name = val.name.replace('--', '.');
  269.                                 } else {
  270.                                         name = val.fullname;
  271.                                 }*/
  272.                                 name = val.fullname;
  273.  
  274.                                 if (val.isParent) {
  275.                                         var preBracket = '{',
  276.                                                 postBracket = '}';
  277.  
  278.                                         if (val.returnType && val.returnType.indexOf('Array') === 0 ) {
  279.                                                 preBracket = '[{';
  280.                                                 postBracket = '}]';
  281.                                         }
  282.  
  283.  
  284.  
  285.                                         $menuItem = $('<div class="menuitem collapsed"></div>');
  286.                                         $menuLink = $('<a href="#' + name + '">' + val.title + '</a>').appendTo($menuItem);
  287.  
  288.                                         $menuLink.click(function(){
  289.                                                 gotoSection(val.fullname, true);
  290.                                         });
  291.                                         $plus = $('<a href="#' + name + '" class="plus"></a>').appendTo($menuItem);
  292.                                         $plus.click(function () {
  293.                                                 toggleExpand($plus.parent());
  294.                                         });
  295.                                         $menuItem.append(':&nbsp;'+ preBracket +'<span class="dots"><span>…</span></span>'an>');
  296.         // add empty submenu
  297. enu
  298.                                         $subMenu = $('<div id="' + val.name + '-menu" style="display:none"><div>').appendTo($menuItem);
  299.                                         $menuItem.append(postBracket);
  300.                                         $menuItem.appendTo($menu);
  301.                                         addSectionOption(val);
  302.                                 } else {
  303.                                         if (val.type === 'method') {
  304.                                                 title = val.title + '()';
  305.                                         } else {
  306.                                                 title = val.title;
  307.                                         }
  308.  
  309.                                         $menuLink = $('<a href="#' + name + '">' + title + '</a>').appendTo($div);
  310.                                         $menuLink.click(function() {
  311.                                                 gotoSection(name, true);
  312.                                         });
  313.                                         if (val.type === 'method') {
  314.                                                 defaults = '[function]';
  315.                                         } else if (val.type === 'property') {
  316.                                                 defaults = '[' + val.returnType + ']';
  317.                                         } else if (val.defaults === 'null' || val.defaults === 'undefined' || val.defaults === '' || val.defaults === undefined) {
  318.                                                 defaults = val.defaults;
  319.                                         } else if (val.returnType === 'String' || val.returnType === 'Color') {
  320.                                                 defaults = '"' + val.defaults + '"';
  321.  
  322.                                         } else {
  323.                                                 defaults = val.defaults;
  324.                                         }
  325.  
  326.                                         if (val.returnType) {
  327.                                                 cls = val.returnType.toLowerCase();
  328.                                         } else {
  329.                                                 cls = '';
  330.                                                 console.warn('Missing returnType for ' + val.fullname);
  331.                                         }
  332.                                                
  333.  
  334.                                         $('<span class="value value-' + cls + '">: ' + escapeHTML(defaults) + '</span>').appendTo($div);
  335.                                 }
  336.                                 if (isObject) {
  337.                                         loadObjectMemberInSection(val);
  338.                                 } else {
  339.                                         loadOptionMemberInSection(val, val.isParent);
  340.                                 }
  341.                         });
  342.  
  343.                         $(document).triggerHandler({
  344.                                 type:"xtra.btn.member.event",
  345.                                 id: isObject ? 'object-' + name : name,
  346.                                 table: isObject ? 'object'option'ion'
  347.                         });
  348.  
  349.                         if (callback) {
  350.                                 callback();
  351.                         }
  352.                 }
  353.         });
  354. };
  355.  
  356. function loadObjectMembers(name){
  357.         $.ajax({
  358.                 type: ",
  359.                 url: 'object/'+ PRODUCTNAME + '-obj/child/' + name,
  360.                 async: false,
  361.                 dataType: "e: "json",
  362.                 success: function (data) {
  363.                         $.each(data, function (key, val) {
  364.                                 loadObjectMemberInSection(val);
  365.                         });
  366.                 }
  367.         });
  368.         $(document).triggerHandler({ type:"xtra.btn.member.event", id: 'object-' + name,table:'object'});
  369. };
  370.  
  371. function gotoSection(anchor, hilighted) {
  372.  
  373.         var name, levels, member, isObjectArr, isObject, parts, $_parent, $_parentparent, $_menu,
  374.                 sectionId, parent,
  375.                 i,
  376.                 callbackStack = []// is it an option-section or an object-section?
  377. on?
  378.         parts = anchor.split("-")// Handle typed parent item, like series<line>
  379. ne>
  380.         name = anchor.split('.');
  381.         if (name.length > 1) {
  382.                 name[name.length - 1] = '-' + name[name.length - 1];
  383.         }
  384.         name = name.join('-');
  385.  
  386.         levels = name.split({1,2}/);
  387.  
  388. );
  389.  
  390.         isObject = (parts.length > 1 && parts[0] == 'object' || Z]/.tes.test(name[0]))// Asyncronously expand parent elements of selected item
  391. tem
  392.         $.each(levels, function(i) {
  393.                 callbackStack.push(function () {
  394.                         var proceed = true,
  395.                                 level,
  396.                                 $_menu,
  397.                                 $_parent;
  398.  
  399.                         if (levels[i]) {
  400.                                 level = levels.slice(0, i + 1).join('-');
  401.  
  402.                                 if (level.indexOf('<') > -1) {
  403.                                         $_parentparent = $('#' + level.split('<')[0] + '-menu').parent();
  404.                                         level = escapeSelector(level);
  405.                                 }
  406.  
  407.                                 $_menu = $('#' + level + '-menu');
  408.                                 $_parent = $_menu.parent();
  409.  
  410.                                 if ($_menu && $_parent.hasClass('collapsed')) {
  411.  
  412.                                         if ($_parentparent && $_parentparent.hasClass('collapsed')) {
  413.                                                 toggleExpand($_parentparent);
  414.                                         }
  415.  
  416.         // Do the toggle, and pass the next level as the callback argument
  417. ent
  418.                                         toggleExpand($_parent, callbackStack[i + 1]);
  419.                                         proceed = false;
  420.  
  421.                                 }
  422.                         }
  423. // For the last path item, show the section etc
  424. etc
  425.                         if (Z]/.tes.test(level[0])) {
  426.                                 level = 'object-' + level;
  427.                         }
  428.                         if ($('#details > div.section#' + level).length) {
  429.                                 toggleSection(level);
  430.  
  431. // empty search
  432. rch
  433.                                 $("#search").val("");
  434.                                 window.location.hash = anchor;
  435.                         }
  436.  
  437.                         if (proceed && callbackStack[i + 1]) {
  438.                                 callbackStack[i + 1]();
  439.                         }
  440.                 });
  441.         })// Hilighting is the last operation in the async stack
  442. ack
  443.         if (hilighted) {
  444.                 callbackStack.push(function () {
  445.                         hilight(name);
  446.                 });
  447.         // Start the recursive iteration
  448. ion
  449.         callbackStack[0]();
  450.  
  451. /*
  452. function addToSelectBox(key, val, type) {
  453.  
  454.         var $menuItem = $('<div class="menuitem collapsed"></div>').appendTo('#' + type + 's'),
  455.                 splut = val.fullname.split('<'),
  456.                 commonName = splut[0],
  457.                 templateName = splut[1].split('>')[0],
  458.                 $menuLink = $('#' + commonName + '-menulink'),
  459.                 $selectbox = $('#' + commonName + '-selectbox');
  460.  
  461.         // The first time we encounter the series, generate the menu item for it.
  462.         if ($menuLink.length === 0) {
  463.                 $menuLink = $('<a href="#' + commonName + '" id="' + commonName + '-menulink">' + commonName + '</a>')
  464.                         .appendTo($menuItem);
  465.  
  466.                 $menuItem.append(': { type: ');
  467.  
  468.                 $selectbox = $('<select id="'+ commonName +'-selectbox">')
  469.                         .bind('change', function () {
  470.                                 console.log(this.value);
  471.                         })
  472.                         .appendTo($menuItem);
  473.  
  474.                 $menuItem.append(' }');
  475.  
  476.         }
  477.  
  478.         $selectbox.append('<option>' + templateName + '</option>')
  479.                 .attr({
  480.                         name: templateName
  481.                 });
  482. }
  483. */}/**
  484.  * Add the first level menu items on page load
  485.  */
  486.  */
  487. function addFirstLevelMenuItem(key, val, type) {
  488.  
  489.  
  490.         var $menuItem = $('<div class="menuitem collapsed"></div>').appendTo('#' + type + 's'),
  491.                 $plus, anchor, $menu, levels, level, member, $menuLink,
  492.                 sectionId = val.fullname || val.name,
  493.                 title = escapeHTML(val.title),
  494.                 mainSection,
  495.                 name = val.name,
  496.                 recurseToType = false,
  497.                 menuItemPrefix = '';
  498.                 prefix = ',
  499.                 suffix = ' = '}';
  500.  
  501.         if (val.returnType && val.returnType.indexOf('Array') === 0) {
  502.                 if (val.returnType === 'Array<Object>') {
  503.                         prefix = ': [{';
  504.                         suffix = '}]';
  505.                 } else {
  506.                         prefix = ';
  507.                         suffix = ' = ']';
  508.                 }              
  509.         }// Global options
  510. ons
  511.         if ($.inArray(val.name, ['global', 'lang']) !== -1) {
  512.                 $menuItem = $('<div class="menuitem collapsed"></div>').appendTo('#global-options');
  513.         }// Handle the series<line> syntax
  514. tax
  515.         if (sectionId.indexOf('<') > -1) {
  516.                 mainSection = sectionId.split('<')[0];// The first time we encounter a menu item on the syntax series<line>, add the series menu item
  517. tem
  518.                 if ($('#' + mainSection + '-menu').length === 0) {
  519.                         sectionId = title = name = mainSection;
  520.                         prefix = ';
  521.                         suffix = ' = ']';
  522.                         recurseToType = tr// run this method again, but now for the { type: "line" } menu item
  523. tem
  524.                 } else {
  525.                         $menuItem.appendTo($('#' + mainSection + '-menu'));
  526.                         menuItemPrefix = '{<br class="typed"/>';
  527.                         title = '<span class="typed">type: "' + sectionId.split('<')[1].split('>')[0] + '"</span>';
  528.                         prefix = ', ';
  529.                 }
  530.  
  531.  
  532.         }
  533.  
  534.         if (menuItemPrefix) {
  535.                 $menuItem.append(menuItemPrefix);
  536.         }
  537.  
  538.         $menuLink = $('<a href="#' + sectionId + '">' + title + '</a>')
  539.                 .appendTo($menuItem)
  540.                 .click(function(){
  541.                         gotoSection(sectionId, true);
  542.                         return false;
  543.                 });
  544.  
  545.         if (val.isParent) {
  546.                 $plus = $('<a href="#' + sectionId + '" class="plus"></a>')
  547.                         .appendTo($menuItem)
  548.                         .click(function () {
  549.                                 toggleExpand($plus.parent());
  550.                         });
  551.         }
  552.  
  553.         $menuItem.append(prefix);
  554.  
  555.         $('<span class="dots"><span>…</span></span>').appendTo($menuItem);
  556.  
  557.         if(val.isParent) {
  558.                 $subMenu = $('<div id="' + name + '-menu"display:none"ay:none"><div>').appendTo($menuItem);
  559.         }
  560.        
  561.         $menuItem.append(suff// create sections in div#details
  562. details
  563.         if (type === 'option') {
  564.                 addSectionOption(val);
  565.         } else {
  566.                 addSectionObject(val);
  567.         }
  568.  
  569.         if (recurseToType) {
  570.                 addFirstLevelMenuItem.apply(null, arguments);
  571.         }
  572. }
  573.  
  574. prepareOffline = function(callback) {
  575.  
  576.         offline = {highcharts: {}, highstock: {}, highmaps:// now we have the data loaded we rewrite $.ajax for offline use
  577. ine use
  578.         $.ajax = function(obj) {
  579.                 var result,
  580.                         type,
  581.                         splitted;
  582.  
  583.                 if (obj.url === PRODUCTNAME + '/names') {
  584.                         result = API[PRODUCTNAME].names;
  585.                 }
  586.  
  587.                 var type = obj.url.split('/');         
  588.  
  589.                 if (obj.url === '+ PRODUCTNAME + 'NAME + '/main') {
  590.                         result = API[PRODUCTNAME].main.option;
  591.                 }
  592.  
  593.                 if (obj.url === '+ PRODUCTNAME + 'NAME + '-obj/main') {
  594.                         result = API[PRODUCTNAME].main.object;
  595.                 }
  596.  
  597.                 splitted = obj.url.split(' + PRODUCTNAME + 'NAME + '-obj/child/');
  598.                 if (splitted.length > 1) {
  599.                         result = API[PRODUCTNAME].object[splitted[1]].children;
  600.                 }
  601.                 splitted = obj.url.split(' + PRODUCTNAME + 'NAME + ');
  602.                 if (splitted.length > 1) {
  603.                         result = API[PRODUCTNAME].option[splitted[1]].children;
  604.                 }
  605.                
  606.                 // result to handler
  607.                 obj.success(result);
  608.         };
  609.  
  610.         callback();
  611. }
  612.  
  613. // build dictionary for offline use
  614. buildApiOffline = function(data, callback) {
  615.  
  616.         var option,            
  617.                 main,
  618.                 names,
  619.                 type,
  620.                 i = 0;
  621.  
  622.         API[PRODUCTNAME] = { option: [], object: [], main: {}, names: [] };
  623.                
  624.         names = API[PRODUCTNAME].names;
  625.  
  626.         function fillWithType(type) {
  627.                 var idx,
  628.                         slot = API[PRODUCTNAME][type],
  629.                         main = API[PRODUCTNAME].main[type] = [];
  630.                         name,
  631.                         parent;
  632.                
  633.                 // Loop over options in dump file
  634.                 for (idx = 0; idx < data[type].length; idx++) {
  635.                         option = data[type][idx];
  636.                         name = option.name;
  637.                         names.push(name);
  638.  
  639.                         if (option.isParent) {
  640.                
  641.                                 // Store main options separately
  642.                                 if (!/-/.test(name)) {   
  643.                                         main.push(option);
  644.                                 }
  645.                
  646.                                 if (slot[name] == undefined) {
  647.                                         slot[name] = {details: option, children: []};
  648.                                 } else {
  649.                                         /* In case the parent option was already
  650.                                          * deducted from a child option
  651.                                          */            
  652.                                         slot[name].details = option;
  653.                                 }            
  654.                         }
  655.  
  656.                         // we have a child!
  657.                         if (slot.hasOwnProperty(option.parent)) {
  658.                                 slot[option.parent].children.push(option);
  659.                         } else {
  660.                                 slot[option.parent] = {details: null, children: [option]};
  661.                         }
  662.                 }      
  663.         }
  664.  
  665.         while(i < 2) {
  666.                 type = ['ype = ['option', 'object'][i];
  667.                 fillWithType(type);
  668.                 i++
  669.         }
  670.  
  671.         callback();
  672.  
  673. };
  674.  
  675. buildPage = function// autocomplete
  676. omplete
  677.                 $.ajax({
  678.                         type: "GET",
  679.                         url: PRODUCTNAME + '/names',
  680.                         async: false,
  681.                         dataType: "json",
  682.                         success: function (data) {
  683.                                 $.each(data, function (key, val) {
  684.                                         var dotted = toDot(val);
  685.                                         names.push(dotted);
  686.                                         optionDictionary[dotted] = val;
  687.                                 });
  688.  
  689.                                 $(" ).autocomplete({
  690.                                         source: names,
  691.                                         autoFocus: true,
  692.                                         minLength: 2,
  693.                                         select: function( event, ui ) {
  694.                                                         gotoSection(ui.item.value, true);
  695.                                         },
  696.                                         position: {
  697.                                                 my: 'left top',
  698.                                                 of: '#search-wrap'
  699.                                         }
  700.                                 });
  701.                         }
  702.                 });
  703.  
  704.                 // load main options and build folded menu tree
  705.                 $.ajax({
  706.                         type: " type: "GET",
  707.                         url: ' + PRODUCTNAME + 'NAME + '/main',
  708.                         async: false,
  709.                         dataType: "json",
  710.                         success: function (data) {
  711.                                 $.each(data, function (key, val) {
  712.                                         addFirstLevelMenuItem(key, val, 'option');
  713.                                 });
  714.                         }
  715.         // load objects of product
  716. product
  717.                 $.ajax({
  718.                         type: "GET",
  719.                         url: ' + PRODUCTNAME + 'NAME + '-obj/main',
  720.                         async: false,
  721.                         dataType: "json",
  722.  
  723.                         success: function (data) {
  724.  
  725.                                 $.each(data, function (key, val) {
  726.                                         addFirstLevelMenuItem(key, val, 'object');
  727.                                 });
  728.                         }
  729.                 // check url for anchor, remove also '()' from old links for object.method().
  730. thod().
  731.                  anchor = window.location.hash.replace('#', '').replace('()','');
  732.                  if (anchor) {
  733.                         gotoSection(anchor, true);
  734.                  }
  735.  
  736.                 if (t_not_found=true/.test(wi.test(window.location.search)) {
  737.                                 dottedName = window.location.hash.split('#').pop();
  738.                                 internalName = optionDictionary[dottedName];
  739.                                 $('div#' + internalName).append('<div class="error">The object/option wasn\'t found in the database, maybe itÍ„\'s inherited??</div>'// focus search
  740. cus search
  741.                  $("#search")[0].fo// Startup
  742. // Startup
  743. $(document).ready( function () {
  744.        
  745.         if (runDB) {
  746.                 buildPage();           
  747.         // prepare dump object
  748. ump object
  749.                 prepareOffline(functi// load offline data
  750. fline data
  751.                         loadScript('./js/' + PRODUCTNAME + '.json', function() {
  752.                                 buildApiOffline(offline[PRODUCTNAME], buildPage);
  753.                         }// hide elements that don't make sence in offline mode
  754. fline mode
  755.                 $('.hidden-offline').hid// convert hash from redirected dash syntax to new dot syntax
  756. dot syntax
  757.         if (cat.test(location.hash)) {
  758.                 location.hash = location.hash.replace('.');
  759.         }
  760. , // Add scrollanimation to button
  761.  to button
  762.         $("a[href='#top']").click(function() {
  763.                 $(").animate({ scrollTop: 0 }, "Top: 0 }, "slow");
  764.                 return false;
  765.         });
  766.  
  767.         $(window).on('scroll', function() {
  768.                 button = $(");
  769.                 if (!$("
  770.                 if (!$("#top").isOnScreen()) {
  771.                         if (button.css('display') {
  772.                                 button.fadeIn("slow");
  773.                         }
  774.                 } else {
  775.                         if (button.css('utton.css('display') == 'block') {
  776.                                 button.fadeOut("slow");
  777.                         }
  778.                 }
  779.         });
  780.  
  781.         $.fn.isOnScreen = function(){
  782.                 var win = $(window),
  783.                         viewport = {
  784.                                 top : win.scrollTop(),
  785.                                 left : win.scrollLeft()
  786.                         };
  787.                
  788.                 viewport.right = viewport.left + win.width();
  789.                 viewport.bottom = viewport.top + win.height();
  790.                
  791.                 var bounds = this.offset();
  792.                 bounds.right = bounds.left + this.outerWidth();
  793.                 bounds.bottom = bounds.top + this.outerHeight();
  794.                
  795.                 return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));
  796.                
  797.         };
  798.  
  799.         function updateHeight() {
  800.                 if (jQuery(window).width() >=// Disable
  801. / Disable
  802.                         var padding,
  803.                         height = $(window).height() - $('#top').height() - $('#footer').height();
  804.                         $("#wrapper").height(height);
  805.                         padding = $("#wrapper .container").innerHeight() - $("#wrapper .container").height();
  806.                         height = $("#wrapper").height() - padding;
  807.                         $("#wrapper-inner").height(height);
  808.                         $("#nav-wrap").height(height);
  809.                         $("#details-wrap").height(height);
  810.                 }// no height defined on the element for mobile devices
  811. le devices
  812.                         $('#nav-wrap').removeAttr('style');
  813.                 }
  814.         };      
  815.        
  816.         updateHeight();
  817.  
  818.         $(window).resize(update// Make the Highcharts/Highstock links dynamic
  819. ks dynamic
  820.         $('#highstock-link, #highcharts-link').click(function () {
  821.                 this.href += location.ha// Login shortcut (hot corner)
  822. ot corner)
  823.         $("<div>")
  824.                 .css({
  825.                         position: 'absolute',
  826.                         display: 'block',
  827.                         width: '10px',
  828.                         height: '10px',
  829.                         right: 0,
  830.                         cursor: 'pointer'
  831.                 })
  832.                 .click(function () {
  833.                                 $('<iframe src=">').dialog({
  834.                                         height: 300
  835.                                 });
  836.                 })
  837.                 .prependTo('#top .container');
  838.        
  839. });

Raw Paste


Login or Register to edit or fork this paste. It's free.