Merge remote branch 'origin/master' into wosch
authorWolfram Schneider <wosch@indexdata.dk>
Mon, 12 May 2014 13:23:30 +0000 (13:23 +0000)
committerWolfram Schneider <wosch@indexdata.dk>
Mon, 12 May 2014 13:23:30 +0000 (13:23 +0000)
doc/mkws-developer.txt
examples/htdocs/jasmine-local-popup.html
examples/htdocs/jasmine-popup.html
src/mkws-core.js

index 7561587..693df63 100644 (file)
@@ -71,10 +71,11 @@ that you want to specialise from -- in this case, "Records" -- using
 the promotion function that's been registered for that type.
 
 Once this has been done, the specialisations can be introduced. In
-this case, it's a very matter of changing the "maxrecs" configuration
-setting to 1 unless it's already been given an explicit value. (That
-would occur if the HTML used an element like <div class="mkwsRecord"
-maxrecs="2">, though it's not obvious why anyone would do that.)
+this case, it's a very simple matter of changing the "maxrecs"
+configuration setting to 1 unless it's already been given an explicit
+value. (That would occur if the HTML used an element like <div
+class="mkwsRecord" maxrecs="2">, though it's not obvious why anyone
+would do that.)
 
 
 WIDGET PROPERTIES AND METHODS
index a848122..02f1863 100644 (file)
 
     <script type="text/javascript" src="test/js/mkws-jasmine-run.js"></script>
     <script type="text/javascript"> mkws_jasmine_init(500); </script>
+
+    <style type="text/css">
+      body > div > form > input.ui-state-default { background: none; }
+    </style>
   </head>
 
   <body>
index 05deaaa..c7667a7 100644 (file)
 
     <script type="text/javascript" src="test/js/mkws-jasmine-run.js"></script>
     <script type="text/javascript"> mkws_jasmine_init(500); </script>
+
+    <style type="text/css">
+      body > div > form > input.ui-state-default { background: none; }
+    </style>
   </head>
 
   <body>
index 69bd47d..6eb53bd 100644 (file)
@@ -428,8 +428,34 @@ mkws.pagerNext = function(tname) {
   }
 
 
+  function selectorForAllWidgets() {
+    if (mkws.config.scan_all_nodes) {
+      // This is the old version, which works by telling jQuery to
+      // find every node that has a class beginning with "mkws". In
+      // theory it should be slower than the class-based selector; but
+      // instrumentation suprisnigly shows this is consistently
+      // faster. It also has the advantage that any widgets of
+      // non-registered types are logged as warnings rather than
+      // silently ignored.
+      return '[class^="mkws"],[class*=" mkws"]';
+    } else {
+      // This is the new version, which works by looking up the
+      // specific classes of all registered widget types. Because all
+      // it requires jQuery to do is some hash lookups in pre-built
+      // tables, it should be very fast; but it silently ignores
+      // widgets of unregistered types.
+      var s = "";
+      for (var type in mkws.widgetType2function) {
+       if (s) s += ',';
+       s += '.mkws' + type;
+      }
+      return s;
+    }
+  }
+
+
   function makeWidgetsWithin(level, node) {
-    node.find('[class^="mkws"],[class*=" mkws"]').each(function() {
+    node.find(selectorForAllWidgets()).each(function() {
       handleNodeWithTeam(this, function(tname, type) {
         var myTeam = mkws.teams[tname];
         if (!myTeam) {