Skrolli 2016.3 - Tuunaa Tulikettua


LISTAUS 1 (index.js):

var pageMod = require("sdk/page-mod");

var ui = require("sdk/ui");
var tabs = require("sdk/tabs");
var panels = require("sdk/panel");

var menuButton = ui.ToggleButton(
{
  id: "menutoggle",
  label: "Show counting menu",
  icon: {
    "16":"./s-icon.png",
    "32":"./s-icon.png",
    "64":"./s-icon.png"
  },
  onChange: handleChange
});

function handleChange(state) {
  if (state.checked) {
    countingMenu.show({
      position: menuButton
    });
  }
}

var countingMenu = panels.Panel({
  contentURL: "./content_html/countingMenu.html",
  contentScriptFile: "./content_scripts/countingMenu.js",
  onHide: handleHide
});


function handleHide(){
  menuButton.state('window', {checked: false});
}

countingMenu.port.on('count-requested', function(keyword){
  var countWorker = tabs.activeTab.attach({
    contentScriptFile: "./content_scripts/countall.js"
  });
  countWorker.port.emit('count-words', keyword);
});

var skrolliPageMod = null;

countingMenu.port.on('pagemod-enabled-changed', function(enabled){
  if(enabled)
  {
    skrolliPageMod = pageMod.PageMod({
      include: '*.skrolli.fi',
      contentScriptFile: './content_scripts/countall.js',
      onAttach: function(worker){
    worker.port.emit('count-words', '[Ss]krolli');
      }
    });
  }
  else
  {
    skrolliPageMod.destroy();
  }
});



LISTAUS 2 (countingMenu.html):


  
    
  
  
    
  




LISTAUS 3 (countingMenu.js):

var wordToCount = document.getElementById("keyword");
var pageModCheckbox = document.getElementById("enable");
var countButton = document.getElementById("countButton");

countButton.disabled = true;

pageModCheckbox.addEventListener('change', function(){

  self.port.emit('pagemod-enabled-changed', pageModCheckbox.checked);
});

wordToCount.addEventListener('input', function(){

  countButton.disabled = (wordToCount.value.length <= 0);  
});

countButton.addEventListener('click', function(){

  self.port.emit('count-requested', wordToCount.value);
});



LISTAUS 4 (countall.js):

var wordToCount = document.getElementById("keyword");
function getTextNodes(parent)
{
  var nodes = [];

  var walker = document.createTreeWalker(parent,
                     NodeFilter.SHOW_TEXT,
                     null,
                     false);
  var node;
  while(node=walker.nextNode())
  {
    nodes.push(node);
  }

  return nodes;
}

function countWord(word)
{
  var elements = getTextNodes(document.body);
  var count = 0;
  var matcher = new RegExp(word,'g');
  
  [].forEach.call(elements, function(e,i,l){
    count += (e.textContent.match(matcher) || []).length;
  });
  
  alert('Word "' + word + '" occurred ' + count + ' times.'); 
}

self.port.on('count-words', countWord);



LINKIT:

https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs
https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs
https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials
https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK
https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager
https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/console#Logging_Levels
http://kb.mozillazine.org/About:config#Adding_modifying_and_resetting_preferences
https://github.com/mozilla/addon-sdk/wiki/Community-developed-modules

http://betterexplained.com/articles/how-to-make-a-bookmarklet-for-your-web-application/
http://www.bookmarklets.com/tools/categor.html
https://www.squarefree.com/bookmarklets/