# K-Meleon Macros (http://kmeleon.sourceforge.net/wiki/index.php?id=MacroLanguage) # ---------- Main K-Meleon Macro Module ---------------------------------------------------------------------------- # # Dependencies : - # Resources : - # Preferences : - # # Table Of Contents Aprox. Line # # # - Global Helpers 35 # - Event Handling 40 # - K-Meleon Macros 110 # - K-Meleon Plugins/Tabs 120 # - K-Meleon Preferences Panel (kmPrefs) 180 # - File Handling 220 # - Opening URLs 245 # - Mozilla Chrome 295 # - Mozilla Preferences 335 # - Accessibility/Privacy/Security 340 # - Type Ahead Find (Page Search) 410 # - K-Meleon Preferences 485 # - Homepage 505 # - JavaScript Document Handling 565 # - Killing Tags 625 # - Scrolling 640 # - Miscellaneous 670 # - Go Buttons 675 # - Home Button 730 # - RSS Button 745 # - Special Opening 755 # - Special Macro Execution 780 # # ------------------------------------------------------------------------------------------------------------------ # ---------- Global Helpers ---------------------------------------------------------------------------------------- $on=_("enabled"); $off=_("disabled"); # ----- Event Handling # Append any macro to be executed On to the appropriate string (semicolon-separated lists): $OnInit=""; $OnSetup=""; $OnStartup=""; $OnOpenWindow=""; $OnOpenTab=""; $OnLoad=""; $OnActivateWindow=""; $OnCloseWindow=""; $OnCloseTab=""; $OnCloseGroup=""; $OnWMAppExit=""; $OnQuit=""; # Append any macro to be executed ONCE On to the appropriate string (semicolon-separated lists): $OnLoadOnce=""; # The following event macros are executed in the # context of the window that triggered the event: OnInit{ # When the default config files have been parsed macros($OnInit); } OnSetup{ # When the user config files have been parsed macros($OnSetup); } OnStartup{ # When the first window is opened macros($OnStartup); } OnOpenWindow{ # When a window/layer is opened macros($OnOpenWindow); } OnOpenTab{ # When a tab is opened macros($OnOpenTab); } OnLoad{ # When a document finished loading macros($OnLoadOnce.$OnLoad); $OnLoadOnce=""; } OnActivateWindow{ # When a window gets the focus macros($OnActivateWindow); } OnCloseWindow{ # When a window/layer is closed macros($OnCloseWindow); } OnCloseTab{ # When a tab is closed macros($OnCloseTab); } OnCloseGroup{ # When a multi-layered window is closed macros($OnCloseGroup); } OnWMAppExit{ # When ID_APP_EXIT is called to terminate the application macros($OnWMAppExit); } OnQuit{ # When the macro plugin (the browser) is being closed macros($OnQuit); } # ----- K-Meleon Macros # Save any macro preferences to this branch of the pref system: $macroPrefBranch="kmeleon.plugins.macros."; # Append any installed module's name to this string (semicolon-separated list): $macroModules=";"; # ----- K-Meleon Plugins/Tabs # Use these global vars to determine the presence of a plugin. # Do not read kmeleon.plugins.?.load at runtime! (The pref may be # false although the plugin is currently loaded or vice versa.) $kBookmarks=getpref(BOOL,"kmeleon.plugins.bookmarks.load"); $kFavorites=getpref(BOOL,"kmeleon.plugins.favorites.load"); $kFullscreen=getpref(BOOL,"kmeleon.plugins.fullscreen.load"); $kHistory=getpref(BOOL,"kmeleon.plugins.history.load"); $kHotlist=getpref(BOOL,"kmeleon.plugins.hotlist.load"); $kLayers=getpref(BOOL,"kmeleon.plugins.layers.load"); $kLayersOnly=$kLayers*getpref(BOOL,"kmeleon.plugins.layers.catchOpen"); $kPrivacy=getpref(BOOL,"kmeleon.plugins.privacy.load"); $kRebarmenu=getpref(BOOL,"kmeleon.plugins.rebarmenu.load"); $kSessions=getpref(BOOL,"kmeleon.plugins.sessions.load"); $kToolbars=getpref(BOOL,"kmeleon.plugins.toolbars.load"); $kTabs=!getpref(BOOL,"kmeleon.notab"); kTabs_Detach{ macroinfo=_("Detach this tab from the current window"); menugrayed=(index($URL,"wyciwyg:")==0)+($TabNumber<2); $__noAvail=(index($URL,"wyciwyg:")==0)+($TabNumber<2); $__noAvail?0:&_kTabs_Detach; } kTabs_ReloadAll{ macroinfo=_("Reload all tabs in the current window"); injectJS("location.reload()","alltabs"); } kPrivacy_ClearAll{ macroinfo=_("Clear all privacy related data"); plugin(privacy,ClearCache); plugin(privacy,ClearCookies); plugin(privacy,ClearHistory); plugin(privacy,ClearMRU); plugin(privacy,ClearSignon); } # PRIVATE _kTabs_Detach{ $OnLoadOnce=$OnLoadOnce."_kTabs_OnDetach;"; $OpenURL=$kSessions?"about:blank":$URL; id(ID_CLOSE_TAB); &OpenURL_InNewWindow; } _kTabs_OnDetach{ $kSessions?pluginmsg(sessions,Undo,0):0; } _kPlugins_BuildMenu{ $__r="Reloa&ding"; $kTabs?setmenu(Nav,popup,$__r,ID_NAV_FORCE_RELOAD):0; $kTabs?setmenu(Nav,command,"",ID_NAV_FORCE_RELOAD):0; $kTabs?setmenu($__r,command,"&Force Reload",ID_NAV_FORCE_RELOAD):0; $kTabs?setmenu($__r,macro,"Reload &All Tabs",kTabs_ReloadAll):0; $kTabs?setmenu(TabButtonPopup,inline,_kTabs_Detach,CloseTab):0; $kTabs?setmenu(_kTabs_Detach,macro,"&Detach Tab",kTabs_Detach):0; $kPrivacy?setmenu("&Clear Data",macro,"Clear A&ll",kPrivacy_ClearAll,"privacy(Config)"):0; } $OnInit=$OnInit."_kPlugins_BuildMenu;"; # ----- K-Meleon Preferences Panel (kmPrefs) kmPrefs{ macroinfo=_("Change preferences and settings"); menugrayed=$ARG=="kgestures"?$_kmPrefs_GesturesAbsent:false; $OpenURL="chrome://kmprefs/content/pref.xul?".$ARG; &OpenURL_InNewWindow; } # PRIVATE $_kmPrefs_GesturesAbsent=true; _kmPrefs_CheckPlugins{ $__data=readfile(getfolder(RootFolder)."\\kplugins\\gestures.dll"); $_kmPrefs_GesturesAbsent=($__data==""); } $OnStartup=$OnStartup."_kmPrefs_CheckPlugins;"; _kmPrefs_BuildMenu{ $__o="&Options..."; # main menu $kBookmarks?setmenu("&Bookmarks",macro,$__o,"kmPrefs(kbookmarks)","bookmarks(Config)"):0; $kBookmarks?setmenu("&Bookmarks",command,"","bookmarks(Config)"):0; $kFavorites?setmenu("F&avorites",macro,$__o,"kmPrefs(kfavorites)","favorites(Config)"):0; $kFavorites?setmenu("F&avorites",command,"","favorites(Config)"):0; $kHotlist?setmenu("H&otlist",macro,$__o,"kmPrefs(khotlist)","hotlist(Config)"):0; $kHotlist?setmenu("H&otlist",command,"","hotlist(Config)"):0; # view menu setmenu("Tool&bars",macro,$__o,"kmPrefs(toolbars)"); $kHistory?setmenu("Histor&y",macro,$__o,"kmPrefs(history)","history(Config)"):0; $kHistory?setmenu("Histor&y",command,"","history(Config)"):0; $kTabs?setmenu("T&abs",macro,$__o,"kmPrefs(tabs)",0):0; $kTabs?setmenu("T&abs",separator,1):0; # tools menu setmenu(Settings,macro,"Mouse &Gestures...","kmPrefs(kgestures)"); $__m="P&ermissions"; setmenu($__m,separator,-1); setmenu($__m,macro,"&JavaScript","kmPrefs(javascript)"); } $OnInit=$OnInit."_kmPrefs_BuildMenu;"; # ----- File Handling # These macros can be used in conjunction with the exec() and # promptforfile() statements to get a command line and a file # type description for a given file extension. getExtensionHandler{ # use for text files $__desiredAction="open"; &_getExtensionHandler; } getSecureExtensionHandler{ # use for script files $__desiredAction="edit"; &_getExtensionHandler; } # PRIVATE _getExtensionHandler{ $__defaultEditor="notepad.exe %1"; $__shell="\\shell\\"; $__cmnd="\\command\\"; $doctype=readreg("HKCR",".".$ext."\\"); $cmdline=""; $doctype==""?$cmdline=$__defaultEditor:$__defaultAction=readreg("HKCR",$doctype.$__shell); $cmdline==""?$cmdline=readreg("HKCR",$doctype.$__shell.$__desiredAction.$__cmnd):0; $cmdline==""?$cmdline=readreg("HKCR",$doctype.$__shell.$__defaultAction.$__cmnd):0; # DDE is not supported here: $cmdline==""?$cmdline=$__defaultEditor:(index($cmdline,"%1")?0:$cmdline=$__defaultEditor); $doctype=readreg("HKCR",$doctype."\\"); $doctype==""?$doctype=sub("%s",$ext,_("%s File")):0; } # ---------- Opening URLs ------------------------------------------------------------------------------------------ # Except OpenURL these macros can only be called by other macros. OpenURL{ macroinfo=_("Prompt for an URL to open"); $__pre=$URLBAR; $__pre==$URL?$__pre="":0; $OpenURL=prompt(_("Enter URL:"),_("Open"),$__pre); &OpenURL_Typed; } OpenURL_InBg{ # Same as OpenURL_InNew, but in background $OpenURL==""?0:$kTabs?openbgtab($OpenURL):openbg($OpenURL); } OpenURL_InNew{ # Open an URL in a new tab if tabs are enabled, in a new window otherwise $OpenURL==""?0:$kTabs?opentab($OpenURL):opennew($OpenURL); } OpenURL_InNewWindow{ # Open an URL in a new window $OpenURL==""?0:opennew($OpenURL); } OpenURL_Selected{ # Use this method when an URL was generated from selected text $_How=$_OpenURL_Selected; $OpenURL==""?0:&_OpenURL_How; } OpenURL_Typed{ # Use this method when an URL was generated from a direct user input (by typing into URL Bar or any prompt) $OpenURL==""?0:$URLBAR=$OpenURL; $OpenURL==""?0:id(ID_NAV_GO); } # ----- PRIVATE $_OpenURL_Group="kmeleon.general.opengroup"; $_OpenURL_Typed="kmeleon.general.openurl"; $_OpenURL_Selected=$macroPrefBranch."selected.openurl"; _OpenURL_How{ $_How=getpref(STRING,$_How); $_How=="ID_OPEN_LINK"?open($OpenURL):0; $_How=="ID_OPEN_LINK_IN_NEW_WINDOW"?opennew($OpenURL):0; $_How=="ID_OPEN_LINK_IN_BACKGROUND"?openbg($OpenURL):0; $_How=="ID_OPEN_LINK_IN_NEW_TAB"?opentab($OpenURL):0; $_How=="ID_OPEN_LINK_IN_BACKGROUNDTAB"?openbgtab($OpenURL):0; } _OpenURL_SetAccels{ setaccel("CTRL ALT O","macros(OpenURL)"); } $OnInit=$OnInit."_OpenURL_SetAccels;"; # ---------- Mozilla Chrome ---------------------------------------------------------------------------------------- moz_AboutCache_Image{ macroinfo=_("View cache information"); $__key=$ImageURL; $__i=index($__key,"#"); $__key=$__i==-1?$__key:substr($__key,0,$__i); index($__key,"http://")==0?$__client="HTTP&sb=1":$__client=""; index($__key,"https://")==0?$__client="HTTP-memory-only&sb=1":0; index($__key,"file://")==0?$__client="image&sb=0":0; index($__key,"resource://")==0?$__client="image&sb=0":0; index($__key,"chrome://")==0?$__client="image-chrome&sb=0":0; $OpenURL="about:cache-entry?client=".$__client."&key=".$__key; $__client==""?0:&OpenURL_InNewWindow; } moz_AboutCache{ macroinfo=_("View information about the Cache Service"); $OpenURL="about:cache"; &OpenURL_InNew; } moz_AboutConfig{ macroinfo=_("View the browser configuration page"); $OpenURL="about:config"; &OpenURL_InNew; } moz_JSConsole{ macroinfo=_("Open the error console"); $OpenURL="chrome://global/content/console.xul"; &OpenURL_InNewWindow; } moz_CertificateViewer{ macroinfo=_("View stored certificates"); $OpenURL="chrome://pippki/content/certManager.xul"; &OpenURL_InNewWindow; } # PRIVATE _moz_BuildMenu{ # edit menu setmenu(Preferences,macro,"C&onfiguration",moz_AboutConfig); # tools menu setmenu("Vie&w Data",macro,"View C&ache",moz_AboutCache,ID_COOKIES_VIEWER); setmenu("Vie&w Data",macro,"View &Certificates",moz_CertificateViewer); setmenu(Misc,macro,"Error &Console",moz_JSConsole); # context menus setmenu(ImageProperties,macro,"Cache &Information",moz_AboutCache_Image); } $OnInit=$OnInit."_moz_BuildMenu;"; # ---------- Mozilla Preferences ----------------------------------------------------------------------------------- # ----- Accessibility/Privacy/Security $pref_Animation="image.animation_mode"; $pref_Colors="browser.display.use_document_colors"; $pref_Cookies="network.cookie.cookieBehavior"; $pref_Frames="browser.frames.enabled"; $pref_Images="permissions.default.image"; $pref_Java="security.enable_java"; $pref_JavaScript="javascript.enabled"; $pref_Popups="dom.disable_open_during_load"; $pref_Referer="network.http.sendRefererHeader"; # Use this global var to determine whether Java can be enabled at runtime. $pref_JavaSupport=getpref(BOOL,$pref_Java); pref_ToggleAnimation{ macroinfo=_("Toggle image animation"); menuchecked=(getpref(STRING,$pref_Animation)=="none"); togglepref(STRING,$pref_Animation,"normal","none"); &_pref_SyncButtons; statusbar(sub("%s",getpref(STRING,$pref_Animation)=="none"?$off:$on,_("Image animation %s"))); } pref_ToggleColors{ macroinfo=_("Toggle page colors"); menuchecked=!getpref(BOOL,$pref_Colors); togglepref(BOOL,$pref_Colors); &_pref_SyncButtons; statusbar(sub("%s",!getpref(BOOL,$pref_Colors)?$off:$on,_("Page color usage %s"))); } pref_ToggleCookies{ macroinfo=_("Toggle cookie acceptance"); menuchecked=(getpref(INT,$pref_Cookies)==2); togglepref(INT,$pref_Cookies,2,0); &_pref_SyncButtons; statusbar(sub("%s",getpref(INT,$pref_Cookies)==2?$off:$on,_("Cookie acceptance %s"))); } pref_ToggleFrames{ macroinfo=_("Toggle frame support"); menuchecked=!getpref(BOOL,$pref_Frames); togglepref(BOOL,$pref_Frames); statusbar(sub("%s",!getpref(BOOL,$pref_Frames)?$off:$on,_("Frame support %s"))); } pref_ToggleImages{ macroinfo=_("Toggle image loading"); menuchecked=(getpref(INT,$pref_Images)==2); togglepref(INT,$pref_Images,1,2); &_pref_SyncButtons; statusbar(sub("%s",getpref(INT,$pref_Images)==2?$off:$on,_("Image loading %s"))); } pref_ToggleJava{ macroinfo=_("Toggle Java support"); menuchecked=!getpref(BOOL,$pref_Java); togglepref(BOOL,$pref_Java); &_pref_SyncButtons; statusbar(sub("%s",!getpref(BOOL,$pref_Java)?$off:$on,_("Java support %s"))); } pref_ToggleJavaScript{ macroinfo=_("Toggle JavaScript execution"); menuchecked=!getpref(BOOL,$pref_JavaScript); togglepref(BOOL,$pref_JavaScript); &_pref_SyncButtons; statusbar(sub("%s",!getpref(BOOL,$pref_JavaScript)?$off:$on,_("JavaScript execution %s"))); } pref_TogglePopups{ macroinfo=_("Toggle popup blocking"); menuchecked=getpref(BOOL,$pref_Popups); togglepref(BOOL,$pref_Popups); &_pref_SyncButtons; statusbar(sub("%s",getpref(BOOL,$pref_Popups)?$on:$off,_("Popup blocking %s"))); } pref_ToggleReferer{ macroinfo=_("Toggle HTTP referer transmission"); menuchecked=(getpref(INT,$pref_Referer)==0); togglepref(INT,$pref_Referer,0,2); &_pref_SyncButtons; statusbar(sub("%s",getpref(INT,$pref_Referer)==0?$off:$on,_("HTTP referer transmission %s"))); } # ----- Type Ahead Find (Page Search) $_pref_TAF="accessibility.typeaheadfind"; pref_ToggleTAF{ macroinfo=_("Toggle Find As You Type"); menuchecked=getpref(BOOL,$_pref_TAF); togglepref(BOOL,$_pref_TAF); statusbar(sub("%s",getpref(BOOL,$_pref_TAF)?$on:$off,_("Find As You Type %s."))); } pref_ToggleTAFAuto{ macroinfo=_("Toggle Find As You Type Autostart"); menugrayed=!getpref(BOOL,$_pref_TAF); menuchecked=getpref(BOOL,$_pref_TAF.".autostart"); togglepref(BOOL,$_pref_TAF.".autostart"); statusbar(sub("%s",getpref(BOOL,$_pref_TAF.".autostart")?$on:$off,_("Find As You Type Autostart %s."))); } pref_ToggleTAFLinks{ macroinfo=_("Toggle Find As You Type in links only"); menugrayed=!getpref(BOOL,$_pref_TAF); menuchecked=getpref(BOOL,$_pref_TAF.".linksonly"); togglepref(BOOL,$_pref_TAF.".linksonly"); statusbar(getpref(BOOL,$_pref_TAF.".linksonly")?_("Search Links Only."):_("Search All Text.")); } # ----- PRIVATE # Menu Integration _pref_BuildMenu{ # tools menu (Accessibility/Privacy/Security) $__m=_Privacy_Settings; setmenu("&Privacy",inline,$__m,PrivateData); setmenu($__m,macro,"Block Co&okies",pref_ToggleCookies); setmenu($__m,macro,"Block &Java",pref_ToggleJava); setmenu($__m,macro,"Block Java&Script",pref_ToggleJavaScript); setmenu($__m,macro,"Block &Popups",pref_TogglePopups); setmenu($__m,macro,"Block &Images",pref_ToggleImages); setmenu($__m,macro,"Block Image Ani&mation",pref_ToggleAnimation); setmenu($__m,macro,"Block Page Co&lors",pref_ToggleColors); setmenu($__m,macro,"Block &Frames",pref_ToggleFrames); setmenu($__m,macro,"Block HTTP &Referer",pref_ToggleReferer); # edit menu (Type Ahead Find) $__m="Page &Search"; setmenu(Find,popup,$__m); setmenu($__m,macro,"Find As You &Type",pref_ToggleTAF); setmenu($__m,separator,-1); setmenu($__m,macro,"Start &Automatically",pref_ToggleTAFAuto); setmenu($__m,macro,"Search &Links Only",pref_ToggleTAFLinks); } _pref_SetAccels{ setaccel(VK_F7,"macros(pref_ToggleJavaScript)"); setaccel(VK_F8,"macros(pref_TogglePopups)"); setaccel(VK_F9,"macros(pref_ToggleImages)"); } $OnInit=$OnInit."_pref_SetAccels;_pref_BuildMenu;"; # Toolbar Integration _pref_SyncButtons{ $__c="CheckButton"; $__m=",macros(pref_Toggle"; # Privacy Bar (make sure the toolbar name is correct): $__toolbar="&Privacy Bar"; pluginmsg(toolbars,$__c,$__toolbar.$__m."Animation),".(getpref(STRING,$pref_Animation)=="none"?1:0)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Colors),".(getpref(BOOL,$pref_Colors)?0:1)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Cookies),".(getpref(INT,$pref_Cookies)==2?1:0)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Images),".(getpref(INT,$pref_Images)==1?0:1)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Java),".(getpref(BOOL,$pref_Java)?0:1)); pluginmsg(toolbars,$__c,$__toolbar.$__m."JavaScript),".(getpref(BOOL,$pref_JavaScript)?0:1)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Popups),".(getpref(BOOL,$pref_Popups)?1:0)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Referer),".(getpref(INT,$pref_Referer)==0?1:0)); # Main Bar (make sure the toolbar name is correct): $__toolbar="&Main Bar"; pluginmsg(toolbars,$__c,$__toolbar.$__m."Popups),".(getpref(BOOL,$pref_Popups)?1:0)); } $OnLoad=$OnLoad."_pref_SyncButtons;"; $OnStartup=$OnStartup."_pref_SyncButtons;"; # ---------- K-Meleon Preferences ---------------------------------------------------------------------------------- $KM_Version=getpref(STRING,"general.useragent.vendorSub"); $KM_Flashblock="kmeleon.flashblock"; $KM_Adblock="kmeleon.adblocking"; KM_ToggleFlashblock{ macroinfo=_("Toggle Flashblock"); menuchecked=getpref(BOOL,$KM_Flashblock); menugrayed=!getpref(BOOL,$pref_JavaScript); togglepref(BOOL,$KM_Flashblock); &_KM_SyncButtons; statusbar(sub("%s",getpref(BOOL,$KM_Flashblock)?$on:$off,_("Flashblock %s"))); } KM_ToggleAdblock{ macroinfo=_("Toggle Ad-Blocking StyleSheet"); menuchecked=getpref(BOOL,$KM_Adblock); togglepref(BOOL,$KM_Adblock); &_KM_SyncButtons; statusbar(sub("%s",getpref(BOOL,$KM_Adblock)?$on:$off,_("CSS Ad-Blocking %s"))); } # ----- Homepage $KM_Homepage="browser.startup.homepage"; $KM_HomeSess="kmeleon.plugins.sessions.openStart"; $KM_StartHome="kmeleon.general.startHome"; $KM_StartSess="kmeleon.plugins.sessions.autoload"; KM_SetAsHomepage{ macroinfo=_("Set the current page as the Home page"); menugrayed=(index($URL,"wyciwyg:")==0); $__noAvail=(index($URL,"wyciwyg:")==0); $__noAvail?0:setpref(STRING,$KM_Homepage,$URL); } KM_StartBlank{ macroinfo=_("Let K-Meleon start with a blank page"); menuchecked=$kSessions?((!getpref(BOOL,$KM_StartHome))*(!getpref(BOOL,$KM_StartSess)+!getpref(STRING,$KM_HomeSess))):!getpref(BOOL,$KM_StartHome); setpref(BOOL,$KM_StartHome,false); $kSessions?setpref(BOOL,$KM_StartSess,false):0; } KM_StartWithHomepage{ macroinfo=_("Let K-Meleon start with the Home page"); menuchecked=$kSessions?(getpref(BOOL,$KM_StartHome)*(!getpref(BOOL,$KM_StartSess)+!getpref(STRING,$KM_HomeSess))):getpref(BOOL,$KM_StartHome); setpref(BOOL,$KM_StartHome,true); $kSessions?setpref(BOOL,$KM_StartSess,false):0; } KM_StartWithSession{ macroinfo=_("Let K-Meleon start with a saved session"); menuchecked=$kSessions*getpref(BOOL,$KM_StartSess)*length(getpref(STRING,$KM_HomeSess)); setpref(BOOL,$KM_StartSess,true); id("sessions(Config)"); } # ----- PRIVATE # Menu Integration _KM_BuildMenu{ # view menu $__m="Ho&me"; setmenu(NavEx,popup,$__m,ID_NAV_HOME); setmenu(NavEx,command,"",ID_NAV_HOME); setmenu($__m,inline,_Home_Open); setmenu(_Home_Open,command,"Open &Home Page",ID_NAV_HOME); setmenu($__m,inline,_Home_Make); setmenu(_Home_Make,macro,"M&ake This Page Your Home Page",KM_SetAsHomepage); setmenu($__m,inline,_Home_Start); setmenu(_Home_Start,macro,"Start With &Blank Page",KM_StartBlank); setmenu(_Home_Start,macro,"Start With Home &Page",KM_StartWithHomepage); $kSessions?setmenu(_Home_Start,macro,"Start With &Session...",KM_StartWithSession):0; # tools menus $__m=_Privacy_Settings; setmenu($__m,macro,"Block F&lash",KM_ToggleFlashblock,"Block Page Co&lors"); setmenu($__m,macro,"Block A&dvertisement",KM_ToggleAdblock,"Block Page Co&lors"); } $OnInit=$OnInit."_KM_BuildMenu;"; # Toolbar Integration _KM_SyncButtons{ $__c="CheckButton"; $__m=",macros(KM_Toggle"; # Privacy Bar (make sure the toolbar name is correct): $__toolbar="&Privacy Bar"; pluginmsg(toolbars,$__c,$__toolbar.$__m."Flashblock),".(getpref(BOOL,$KM_Flashblock)?1:0)); pluginmsg(toolbars,$__c,$__toolbar.$__m."Adblock),".(getpref(BOOL,$KM_Adblock)?1:0)); } $OnLoad=$OnLoad."_KM_SyncButtons;"; $OnStartup=$OnStartup."_KM_SyncButtons;"; # ---------- JavaScript Document Handling -------------------------------------------------------------------------- # JavaScript function urlencode() to produce same result as macro function urlencode() $_JS_urlencode="function urlencode(s){return encodeURIComponent(s).replace(/%25([A-F0-9]{2})/g,'%$1').replace(/%23/g,'#').replace(/\\//g,'%2F')}"; # Parameters for JS_hndlDoc(s) (set those you need before calling the macro): $JS_doit=""; $JS_func=""; $JS_last=""; $JS_fail=""; JS_hndlDocs{ # $JS_doit takes the code to be executed in the context of each frame # $JS_func is the right place for functions and global variables (e.g. when you want to count something over all frames) # $JS_last is the right place for finishing actions (e.g. when you want to alert what you have counted over all frames) # $JS_fail is the right place to handle errors that may occur when accessing a frame (Gecko prevents cross-site scripting) injectJS("(function(){".$JS_func.$_JS_urlencode."function hndlFrm(w){try{with(w.document){".$JS_doit."}}catch(e){".$JS_fail."}for(var j=0,f=w.frames;j;;...;;" or an empty string) # Output (for use in your macros): # - $ListItem : The current substring $ListItem=$List?substr($List,0,index($List,";")):""; while($ListItem) { macros($ExecMacros); $List=$List?sub($ListItem.";","",$List):""; $ListItem=$List?substr($List,0,index($List,";")):""; } }