My HELPER functions

Useful functions that can be used with @require in scripts

当前为 2015-08-04 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/11420/65694/My%20HELPER%20functions.js

  1. // ==UserScript==
  2. // @name My HELPER functions
  3. // @version 0.1
  4. // @date 2015/08/03
  5. // @author https://greasyfork.org/users/12782-fr%C3%A9d%C3%A9ric-sanz
  6. // @contributor
  7. // @namespace freMea
  8. // @description Useful functions that can be used with @require in scripts
  9.  
  10. // @license Creative Commons CC-BY-NC-SA
  11. // ==/UserScript==
  12.  
  13. ///////////////////////////////////////////////////////////////////////////////
  14. // ++++++++++++++++++++ GREASEMONKEY API EMULATION +++++++++++++++++++++++++++
  15. ///////////////////////////////////////////////////////////////////////////////
  16.  
  17. // une fonction log personnalisée dans la console web (section 'journal') pour les scripts GreaseMonkey
  18. function _log(info) {
  19. console.log('\t\t\t\t::: ' + GM_info.script.name + ' ' + GM_info.script.version + ' :::\n' + info + '\n...........................................................................');
  20. }
  21.  
  22.  
  23. ///////////////////////////////////////////////////////////////////////////////
  24. // +++++++++++++++++++++++ WORKING WITH THE URL ++++++++++++++++++++++++++++++
  25. ///////////////////////////////////////////////////////////////////////////////
  26.  
  27. // insérer paramètre à l'url puis la recharger
  28. function insertParam(key, value) {
  29. key = encodeURIComponent(key); value = encodeURIComponent(value);
  30.  
  31. // teste si l'url contient déjà des paramètres et les liste le cas échéant dans la variable kvp (tableau)
  32. var kvp = location.search.substr(1).split('&');
  33.  
  34. //_log('new key = ' + key +'\nnew value = '+ value +'\nparamètres existants = '+kvp);
  35.  
  36. // si l'url est vide de paramètre, alors la fonction ajoute celui donné et recharge la page
  37. if (kvp == '') {
  38. location.search = '?' + key + '=' + value;
  39. }
  40. // autrement véfifier que le paramètre donné n'est pas déjà présent
  41. else {
  42.  
  43. var i = kvp.length;
  44. var x;
  45.  
  46. while (i--) {
  47. x = kvp[i].split('=');
  48. //_log('paramètre existant n°' + i +'\nvaleur = '+ kvp[i]);
  49.  
  50. // si c'est le cas avec la même valeur, on dégage
  51. if ((x[0] == key) && (x[1] == value)) {
  52. //_log('Le paramètre existe déjà, kassos!!!');
  53. return;
  54. }
  55.  
  56. // si c'est le cas et contient une autre valeur, la modifier
  57. else if ((x[0] == key) && (x[1] != value)) {
  58. //_log('La valeur est différente et sera donc modifiée');
  59. x[1] = value;
  60. kvp[i] = x.join('=');
  61. break;
  62. }
  63. }
  64.  
  65. // dans tous les cas l'ajouter aux paramètres existants
  66. if (i < 0) { kvp[kvp.length] = [key, value].join('='); }
  67.  
  68. //this will reload the page, it's likely better to store this until finished
  69. location.search = kvp.join('&');
  70. }
  71. }
  72. ///////////////////////////////////////////////////////////////////////////////
  73. // +++++++++++++++++++++++++++ DOM FUNCTIONS +++++++++++++++++++++++++++++++++
  74. ///////////////////////////////////////////////////////////////////////////////
  75.  
  76. // Retourne un objet HTML à partir de son id (not equal to jquery $('#id')[0])
  77. function $id(id,root_el) {
  78. if (root_el === undefined) root_el = document;
  79. return root_el.getElementById(id);
  80. }
  81. // =============================================================================
  82.  
  83. /* Retourne une liste de nœuds (NodeList) des éléments trouvés avec la classe spécifiée.
  84. Les classes multiples doivent être séparée par un espace.
  85. [root_el] = option permettant de spécifier l'élément dans lequel rechercher (défaut=document)
  86. ex: $class('rouge test') */
  87. function $class(class_Name,root_el) {
  88. if (root_el === undefined) root_el = document;
  89. return root_el.getElementsByClassName(class_Name);
  90. }
  91. // =============================================================================
  92.  
  93. /* Retourne une liste de nœuds (NodeList) des éléments trouvés avec la balise spécifiée.
  94. La chaine générique globale '*' est possible, elle représente tous les élements.
  95. [root_el] = option permettant de spécifier l'élément dans lequel rechercher (défaut=document)
  96. ex: $tag('div') */
  97. function $tag(tagName,root_el) {
  98. if (root_el === undefined) root_el = document;
  99. return root_el.getElementsByTagName(tagName);
  100. }
  101. /* ============ Fonction raccourci pour les fonctions querySelector =============
  102. CSSele = CSS selector tel que par ex: 'div.class[news="true"]:not([type="checkbox"])'
  103. de multiples selecteurs sont possibles en les séparant par une virgule
  104. [extend] = option dont la valeur est 1 (par défaut) ou 0
  105. 1: retourne tous les éléments satisfaisant au sélecteur,
  106. dans l'ordre dans lequel ils apparaissent dans l'arbre du document (type de retour : NodeList), ou un tableau NodeList vide si rien n'est trouvé.
  107. 0: retourne le premier élément trouvé satisfaisant au sélecteur (type de retour : Element), ou null si aucun objet correspondant n'est trouvé.
  108. [root_el] = option permettant de spécifier l'élément dans lequel rechercher (défaut=document)
  109. ================================================================================*/
  110. function $get(CSSele,extend,root_el) {
  111. if (root_el === undefined) root_el = document;
  112. if (extend === undefined) extend = 1;
  113. if (extend == 1){return root_el.querySelectorAll(CSSele);}
  114. else if (extend == 0){return root_el.querySelector(CSSele);}
  115. }
  116. // =============================================================================
  117.  
  118. // remove element from the dom by its id
  119. function delNodeId(id)
  120. {
  121. return (elem=$id(id)).parentNode.removeChild(elem);
  122. }
  123. // =============================================================================
  124.  
  125. /* Supprime du dom les éléments avec la classe spécifiée
  126. [root_el] = option permettant de spécifier l'élément dans lequel rechercher (défaut=document)
  127. ex: delNodeClass('rouge',someNodeReference) */
  128. function delNodeClass(class_Name,root_el) {
  129. if (root_el === undefined) root_el = document;
  130. elements = root_el.getElementsByClassName(class_Name);
  131. while(elements.length > 0) {
  132. elements[0].parentNode.removeChild(elements[0]);
  133. }
  134. }
  135. // =============================================================================
  136.  
  137. /* Supprimer le premier élément enfant de l'élément donné
  138. ex: delFirstChild(someClassNode[i]) */
  139. function delFirstChild(reference) {
  140. if (reference){
  141. reference.removeChild(reference.children[0]);
  142. } else {
  143. _log("'"+reference+"' introuvable");
  144. }
  145. }
  146. // =============================================================================
  147.  
  148. /* Supprimer tous les éléments enfants de l'élément donné
  149. ex: delAllChild(someClassNode[i]) */
  150. function delAllChild(reference) {
  151. if (reference.children){
  152. for(var i = 0; i < reference.children.length; i++) {
  153. reference.removeChild(reference.children[i]);
  154. }
  155. } else {
  156. _log("Aucun enfant de '"+reference+"' trouvé");
  157. }
  158. }
  159. // =============================================================================
  160.  
  161. // Creates a new node with the given attributes, properties and event listeners
  162. function createNode(type, attributes, props, evls) {
  163.  
  164. var node = document.createElement(type);
  165.  
  166. if (attributes) {
  167. for (var attr in attributes) {
  168. if (attributes.hasOwnProperty(attr)) node.setAttribute(attr, attributes[attr]);
  169. }
  170. }
  171.  
  172. if (props) {
  173. for (var prop in props) {
  174. if ((props.hasOwnProperty(prop)) && (prop in node)) node[prop] = props[prop];
  175. }
  176. }
  177.  
  178. if (Array.isArray(evls)) {
  179. evls.forEach(function(evl) {
  180. if (Array.isArray(evl)) node.addEventListener.apply(node, evl);
  181. });
  182. }
  183. return node;
  184. }
  185. // =============================================================================
  186.  
  187. // Get 'Meta' attribute 'content' by selecting 'property' attribute, equivalent to the jquery $("meta[property='og:type']").attr("content");
  188. function GetMetaValue(propname, propname_value, attr) {
  189. var metaTags = document.getElementsByTagName("meta");
  190. var counter = 0;
  191. for (counter; counter < metaTags.length; counter++) {
  192. //_log(metaTags[counter].getAttribute(propname));
  193.  
  194. if (metaTags[counter].getAttribute(propname) == propname_value) {
  195. return metaTags[counter].getAttribute(attr);
  196. }
  197. }
  198. return "no meta found with this value";
  199. }
  200. // =============================================================================