@@ -662,10 +662,113 @@
662 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The remaining window.fossil bootstrap code is not dependent on
663 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** C-runtime state... */
664 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
builtin_request_js("fossil.bootstrap.js");
665 665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
666 666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Given the NAME part of fossil.NAME.js, this function checks whether
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that module has been emitted by this function before. If it has,
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it returns -1 with no side effects. If it has not, it queues up
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (via builtin_request_js()) an emit of the module via and all of its
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** known (by this function) fossil.XYZ.js dependencies (in their
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** dependency order) and returns 1. If it does not find the given
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** module name it returns 0.
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** As a special case, if passed 0 then it queues up all known modules
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and returns -1.
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The very first time this is called, it unconditionally calls
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** builtin_emit_script_fossil_bootstrap().
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Any given module is only queued once, whether it is explicitly
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** passed to the function or resolved as a dependency. Any attempts to
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** re-queue them later are harmless no-ops.
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int builtin_emit_fossil_js_once(const char * zName){
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int once = 0;
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct FossilJs {
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zName; /* NAME part of fossil.NAME.js */
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int emitted; /* True if already emitted. */
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zDeps; /* \0-delimited list of other FossilJs
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entries: all known deps of this one. Each
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** REQUIRES an EXPLICIT trailing \0, including
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the final one! */
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } fjs[] = {
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This list ordering isn't strictly important. */
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"confirmer", 0, 0},
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"copybutton", 0, "dom\0"},
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"dom", 0, 0},
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"fetch", 0, 0},
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"numbered-lines", 0, "popupwidget\0copybutton\0"},
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"pikchr", 0, "dom\0"},
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"popupwidget", 0, "dom\0"},
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"storage", 0, 0},
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"tabs", 0, "dom\0"}
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int nFjs = sizeof(fjs) / sizeof(fjs[0]);
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0==once){
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++once;
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_script_fossil_bootstrap(1);
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0==zName){
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( i = 0; i < nFjs; ++i ){
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_fossil_js_once(fjs[i].zName);
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( i = 0; i < nFjs; ++i ){
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0==strcmp(zName, fjs[i].zName)){
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(fjs[i].emitted){
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char nameBuffer[50];
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(fjs[i].zDeps){
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zDep = fjs[i].zDeps;
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(*zDep!=0){
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_fossil_js_once(zDep);
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDep += strlen(zDep)+1/*NUL delimiter*/;
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(sizeof(nameBuffer)-1, nameBuffer,
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "fossil.%s.js", fjs[i].zName);
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_request_js(nameBuffer);
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fjs[i].emitted = 1;
737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** COMMAND: test-js-once
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tester for builtin_emit_fossil_js_once().
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usage: %fossil test-js-once filename
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void test_js_once(void){
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(g.argc<2){
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ usage("?FILENAME...?");
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(2==g.argc){
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_fossil_js_once(0);
758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(builtin.nReq>8);
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i = 2; i < g.argc; ++i){
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_fossil_js_once(g.argv[i]);
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(builtin.nReq>1 && "don't forget implicit fossil.bootstrap.js");
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i = 0; i < builtin.nReq; ++i){
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("ndx#%d = %d = %s\n", i, builtin.aReq[i],
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aBuiltinFiles[builtin.aReq[i]].zName);
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
667 770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
668 771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
669 772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convenience wrapper which calls builtin_request_js() for a series
670 773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of builtin scripts named fossil.NAME.js. The first time it is
671 774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** called, it also calls builtin_emit_script_fossil_bootstrap() to
@@ -672,101 +775,57 @@
672 775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** initialize the window.fossil JS API. The first argument is the NAME
673 776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of the first API to emit. All subsequent arguments must be
674 777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** strings of the NAME part of additional fossil.NAME.js files,
675 778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** followed by a NULL argument to terminate the list.
676 779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** e.g. pass it ("fetch", "dom", "tabs", 0) to load those 3
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** APIs. Do not forget the trailing 0!
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** e.g. pass it ("fetch", "dom", "tabs", 0) to load those 3 APIs (or
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pass it ("fetch","tabs",0), as "dom" is a dependency of "tabs", so
782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it will be automatically loaded). Do not forget the trailing 0!
783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it is JS_BUNDLED then this routine queues up an emit of ALL of
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the JS fossil.XYZ.js APIs which are not strictly specific to a
786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** single page, and then calls builtin_fulfill_js_requests(). The idea
787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is that we can get better bundle caching and reduced HTTP requests
788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by including all JS, rather than creating separate bundles on a
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** per-page basis. In this case, all arguments are ignored!
790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function has an internal mapping of the dependencies for each
792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the known fossil.XYZ.js modules and ensures that the
793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** dependencies also get queued (recursively) and that each module is
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** queued only once.
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If passed a name which is not a base fossil module name then it
797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will fail fatally!
798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** DO NOT use this for loading fossil.page.*.js: use
800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** builtin_request_js() for those.
801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the current JS delivery mode is *not* JS_BUNDLED then this
803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function queues up a request for each given module and its known
804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** dependencies, but does not immediately fulfill the request, thus it
805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be called multiple times.
806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a given module is ever passed to this more than once, either in
808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a single invocation or multiples, it is only queued for emit a
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** single time (i.e. the 2nd and subsequent ones become
810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no-ops). Likewise, if a module is requested but was already
811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** automatically queued to fulfill a dependency, the explicit request
812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** becomes a no-op.
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Bundled mode is the only mode in which this API greatly improves
815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aggregate over-the-wire and HTTP request costs. For other modes,
816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** reducing the inclusion of fossil.XYZ APIs to their bare minimum
817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** provides the lowest aggregate costs. For debate and details, see
818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the discussion at:
819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** https://fossil-scm.org/forum/forumpost/3fa2633f3e
679 821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
680 822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In practice it is normally necessary (or preferred) to call
681 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** builtin_fulfill_js_requests() after calling this, before proceeding
682 824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to call builtin_request_js() for page-specific JS, in order to
683 825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** improve cachability.
684 826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Achtung: the fossil.page.XYZ.js files are page-specific, containing
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the app-level logic for that specific page, and loading more than
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** one of them in a single pagee will break that page. Each of those
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** expects to "own" the page it is loaded in, and it should be loaded
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as late in the JS-loading process as feasible, ideally bundled (via
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** builtin_request_js()) with any other app-/page-specific JS it may
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** need.
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void builtin_emit_fossil_js_apis( const char * zApi, ... ) {
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int once = 0;
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zArg;
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char * zName;
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_list vargs;
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(0==once++){
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_emit_script_fossil_bootstrap(1);
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName = mprintf("fossil.%s.js", zApi);
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_request_js(zName);
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zName);
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_start(vargs,zApi);
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (zArg = va_arg (vargs, const char *))!=0 ){
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName = mprintf("fossil.%s.js", zArg);
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_request_js(zName);
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zName);
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_end(vargs);
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This is a variant of builtin_emit_fossil_js_apis() which is
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** equivalent to:
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if(!builtin_bundle_all_fossil_js_apis()){
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** builtin_emit_fossil_js_apis(zApi, ...args);
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** }
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void builtin_fossil_js_bundle_or( const char * zApi, ... ) {
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zArg;
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char * zName;
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_list vargs;
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int once = 0;
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(builtin_bundle_all_fossil_js_apis()){
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(0==once++){
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_emit_script_fossil_bootstrap(1);
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName = mprintf("fossil.%s.js", zApi);
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_request_js(zName);
737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zName);
738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_start(vargs,zApi);
739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (zArg = va_arg (vargs, const char *))!=0 ){
740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName = mprintf("fossil.%s.js", zArg);
741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_request_js(zName);
742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zName);
743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_end(vargs);
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If builtin_get_js_delivery_mode() returns JS_BUNDLED then this
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** function emits, via builtin_request_js(), all JS fossil.XYZ APIs
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** which are not strictly specific to a single page, and then calls
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** builtin_fulfill_js_requests(). The idea is that we can get better
753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bundle caching and reduced HTTP requests by including all JS,
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** rather than creating separate bundles on a per-page basis. It then
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** returns true. As a special case, if this is called more than once
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in bundled mode, subsequent calls are a no-op.
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the current JS delivery mode is *not* JS_BUNDLED then this
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** function is a no-op and returns false. The reason is simply because
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bundled mode is the only mode in which this API improves aggregate
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** over-the-wire and HTTP request costs. For other modes, reducing the
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** inclusion of fossil.XYZ APIs to their bare minimum provides the
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** lowest aggregate costs. For debate and details, see the discussion
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at:
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** https://fossil-scm.org/forum/forumpost/3fa2633f3e
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
768 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Minor caveat: the purpose of emitting all of the fossil.XYZ JS APIs
769 828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** at once is to reduce over-the-wire transfers by enabling cross-page
770 829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** caching, but if there are other JS scripts pending via
771 830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** builtin_request_js() when this is called then they will be included
772 831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the JS request emitted by this routine, resulting in a different
@@ -773,39 +832,44 @@
773 832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** script URL than if they were not included. Thus, if a given page
774 833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** has its own scripts to install via builtin_request_js(), they
775 834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** should, if possible, be delayed until after this is called OR the
776 835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** page should call builtin_fulfill_js_requests() to flush the request
777 836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** queue before calling this routine.
837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Achtung: the fossil.page.XYZ.js files are page-specific, containing
839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the app-level logic for that specific page, and loading more than
840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one of them in a single page will break that page. Each of those
841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expects to "own" the page it is loaded in, and it should be loaded
842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as late in the JS-loading process as feasible, ideally bundled (via
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** builtin_request_js()) with any other app-/page-specific JS it may
844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** need.
778 845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
779 846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Example usage:
780 847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if(!builtin_bundle_all_fossil_js_apis()){
782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** builtin_emit_fossil_js_apis("dom", "fetch", 0);
783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** }
848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** builtin_fossil_js_bundle_or("dom", "fetch", 0);
784 849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** In bundled mode, that will emit all builtin fossil JS APIs, and in
850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In bundled mode, that will (the first time it is called) emit all
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** builtin fossil JS APIs and "fulfill" the queue immediately. In
786 852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** non-bundled mode it will queue up the "dom" and "fetch" APIs to be
787 853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** emitted the next time builtin_fulfill_js_requests() is called.
788 854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int builtin_bundle_all_fossil_js_apis(void){
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void builtin_fossil_js_bundle_or( const char * zApi, ... ) {
790 856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int bundled = 0;
857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zArg;
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_list vargs;
859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
791 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(JS_BUNDLED == builtin_get_js_delivery_mode()){
792 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!bundled){
793 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bundled = 1;
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- builtin_emit_fossil_js_apis(
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The order of the following arguments is important: any
796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- which have dependencies must be listed after their
797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dependencies. ALL of them depend on the core window.fossil
798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bootstrapping bits, and those are initialize by this
799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- call. */
800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "dom", "fetch", "storage", "tabs",
801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "confirmer", "popupwidget",
802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "copybutton", "numbered-lines",
803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "pikchr",
804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0);
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_emit_fossil_js_once(0);
805 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
builtin_fulfill_js_requests();
806 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_start(vargs,zApi);
869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( zArg = zApi; zArg!=0; (zArg = va_arg (vargs, const char *))){
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0==builtin_emit_fossil_js_once(zArg)){
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("Unknown fossil JS module: %s\n", zArg);
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
810 873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_end(vargs);
811 875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
812 876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!