Merge remote branch 'working/user/dbwells/shared_siss_editor'
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Tue, 3 Apr 2012 16:49:28 +0000 (12:49 -0400)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Tue, 3 Apr 2012 16:49:28 +0000 (12:49 -0400)
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Open-ILS/src/templates/serial/edit_siss.tt2 [new file with mode: 0644]
Open-ILS/web/js/dojo/openils/serial/nls/serial.js [new file with mode: 0644]
Open-ILS/web/js/ui/default/serial/edit_siss.js [new file with mode: 0644]
Open-ILS/web/js/ui/default/serial/subscription/issuance.js
Open-ILS/xul/staff_client/server/serial/manage_subs.js
Open-ILS/xul/staff_client/server/serial/siss_editor.xul

diff --git a/Open-ILS/src/templates/serial/edit_siss.tt2 b/Open-ILS/src/templates/serial/edit_siss.tt2
new file mode 100644 (file)
index 0000000..5573289
--- /dev/null
@@ -0,0 +1,17 @@
+[% WRAPPER 'base.tt2' %]
+<script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/serial/edit_siss.js'></script>
+<script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/serial/subscription/caption_and_pattern.js"></script>
+<script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/serial/subscription/issuance.js"></script>
+<script type="text/javascript">
+    dojo.require('openils.Util');
+    [% ctx.page_args = ctx.page_args.reverse %]
+    var siss_id = '[% ctx.page_args.0 %]';
+    var ssub_id = '[% ctx.page_args.1 %]';
+    openils.Util.addOnLoad(function() { drawSiss(siss_id, ssub_id) });
+</script>
+
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+    <div id='edit-pane'> </div>
+</div>
+
+[% END %]
diff --git a/Open-ILS/web/js/dojo/openils/serial/nls/serial.js b/Open-ILS/web/js/dojo/openils/serial/nls/serial.js
new file mode 100644 (file)
index 0000000..482e914
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "CREATE_ISSUANCE": "Create Issuance",
+    "MODIFY_ISSUANCE": "Modify Issuance",
+    "SAVE_SUCCESSFUL": "Save Successful"
+}
diff --git a/Open-ILS/web/js/ui/default/serial/edit_siss.js b/Open-ILS/web/js/ui/default/serial/edit_siss.js
new file mode 100644 (file)
index 0000000..2fd8495
--- /dev/null
@@ -0,0 +1,84 @@
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.Button');
+dojo.require('dijit.form.FilteringSelect');
+dojo.require('openils.PermaCrud');
+dojo.require('openils.widget.EditPane');
+dojo.require("openils.widget.HoldingCode");
+
+dojo.requireLocalization('openils.serial', 'serial');
+var localeStrings = dojo.i18n.getLocalization('openils.serial', 'serial');
+
+// fresh_scap_selector needs these defined as globals XXX rework?
+var pcrud;
+var sub_id;
+
+function drawSiss(siss_id, ssub_id) {
+    var iss_grid = { overrideEditWidgets : {} };
+
+    iss_grid.overrideEditWidgets.creator =
+        new dijit.form.TextBox({"disabled": true});
+    iss_grid.overrideEditWidgets.creator.shove = {
+        "create": openils.User.user.id()
+    };
+
+    iss_grid.overrideEditWidgets.editor =
+        new dijit.form.TextBox({
+            "disabled": true, "value": openils.User.user.id()
+        });
+
+    iss_grid.overrideEditWidgets.holding_type =
+        new dijit.form.TextBox({"disabled": true});
+
+    var pane_args = {
+        hideActionButtons : true,
+        overrideWidgets : iss_grid.overrideEditWidgets
+    }
+
+    var button_label;
+    pcrud = new openils.PermaCrud();
+    if (siss_id == 'new') {
+        sub_id = ssub_id;
+        pane_args.fmClass = 'siss';
+        pane_args.mode = 'create';
+        pane_args.onPostSubmit = function(req, cudResults){
+            //TODO: better success check
+            alert(localeStrings.SAVE_SUCCESSFUL);
+            //location.href = location.href.replace(/new\/.*/, cudResults[0].id());
+            parent.document.getElementById(window.name).refresh_command();
+        }
+        button_label = localeStrings.CREATE_ISSUANCE;
+    } else {
+        pane_args.fmObject = pcrud.retrieve('siss', siss_id);
+        pane_args.onPostSubmit = function(req, cudResults){
+            //alert('req: '+req.toSource());
+            //alert('cudResults: '+cudResults);
+            //TODO: better success check
+            alert(localeStrings.SAVE_SUCCESSFUL);
+            parent.document.getElementById(window.name).refresh_command();
+        }
+        sub_id = pane_args.fmObject.subscription();
+        button_label = localeStrings.MODIFY_ISSUANCE;
+    }
+    iss_grid.overrideEditWidgets.subscription =
+        new dijit.form.TextBox({
+            "disabled": true, "value": sub_id
+        });
+    fresh_scap_selector(iss_grid); // embed scap wizard into generated form
+
+    var pane = new openils.widget.EditPane(
+        pane_args, dojo.byId('edit-pane')
+    );
+
+    pane.fieldOrder = ['subscription','creator','editor','label','date_published','caption_and_pattern','holding_type'];
+    pane.suppressFields = ['id', 'holding_link_id','create_date','edit_date'];
+    pane.startup();
+
+    var tbody = pane.table.getElementsByTagName('tbody')[0];
+    var applySpan = document.createElement('span');
+    tbody.appendChild(document.createElement('tr').appendChild(document.createElement('td').appendChild(applySpan)));
+    new dijit.form.Button({
+        label: button_label,
+        onClick: function() {pane.performAutoEditAction();}
+    }, applySpan);
+
+}
index eb4fae4..3f4dfcf 100644 (file)
@@ -21,7 +21,7 @@ function fresh_scap_selector(grid) {
                     selector, "onChange", null, function() {
                         if (this.item) {
                             var widget =
-                                iss_grid.overrideEditWidgets.holding_type;
+                                grid.overrideEditWidgets.holding_type;
                             widget.attr("value", this.item.type);
                             widget.attr("disabled", true);
                         }
index 74ca397..e973eb7 100644 (file)
@@ -45,24 +45,62 @@ serial.manage_subs.prototype = {
         var obj = this;
         try {
             $('serial_manage_subs_editor_deck').selectedIndex = obj.editor_indexes[type];
-            var editor_type = type + '_editor';
-            if (typeof obj[editor_type] == 'undefined') {
-                JSAN.use('serial.' + editor_type);
-                obj[editor_type] = new serial[editor_type](); 
-            }
 
-            params.do_edit = true;
-            params.handle_update = true;
-            if (mode == 'add') {
+            if (type == "siss") { // begin transition from xul to dojo editors
+                var iframe = dojo.byId('alt_siss_editor');
+                var src;
+                if (mode == "add") {
+                    src = '/eg/serial/edit_siss/new/' + params.sisses[0].subscription();
+                    iframe.refresh_command = function () {obj.refresh_list();};
+                } else {
+                    src = '/eg/serial/edit_siss/' + params.siss_ids[0];
+                    iframe.refresh_command = function () { /* TODO: redraw tree node */ };
+                }
+                iframe.setAttribute("src", src);
+            } else {
+                var editor_type = type + '_editor';
+                if (typeof obj[editor_type] == 'undefined') {
+                    JSAN.use('serial.' + editor_type);
+                    obj[editor_type] = new serial[editor_type]();
+                }
+
+                params.do_edit = true;
+                params.handle_update = true;
                 params.trigger_refresh = true;
-                params.refresh_command = function () {obj.refresh_list();};
+                if (mode == 'add') {
+                    params.refresh_command = function () {obj.refresh_list();};
+                } else {
+                    params.refresh_command = function () {obj.remap_node(type, this);};
+                }
+
+                obj[editor_type].init(params);
             }
-            obj[editor_type].init(params);
         } catch(E) {
             obj.error.standard_unexpected_error_alert('editor_init() error',E);
         }
     },
 
+    // while not a true tree node repace, this should at least prevent
+    // non-display side-effects.  True node replace is TODO
+    'remap_node' : function(type, editor_obj) {
+        var obj = this;
+        try {
+            for (i = 0; i < editor_obj[editor_obj.fm_type_plural].length; i++) {
+                var new_obj = editor_obj[editor_obj.fm_type_plural][i];
+                var old_obj = obj['map_' + type][type + '_' + new_obj.id()];
+                if (type == 'ssub') { // add children back on
+                    new_obj.distributions(old_obj.distributions());
+                    new_obj.issuances(old_obj.issuances());
+                    new_obj.scaps(old_obj.scaps());
+                }
+                obj['map_' + type][type + '_' + new_obj.id()] = new_obj;
+            }
+            editor_obj.render();
+        } catch(E) {
+            obj.error.standard_unexpected_error_alert('remap_node() error',E);
+        }
+    },
+
     'do_delete' : function(type, method, overridable_events) {
         var obj = this;
         try {
index 3e80105..85dd84d 100644 (file)
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
        <vbox flex="1" id="serial_siss_editor_panel" class="my_overflow">
-        <vbox id="brief_display_box"/>
-
-               <hbox flex="1" style="overflow: auto">
-                       <vbox flex="1" id="before_splitter1" oils_persist="width">
-                               <label value="Issuance" style="font-weight: bold; font-size: large"/>
-                               <vbox id="siss_editor_left_pane" flex="1"/>
-                       </vbox>
-                       <splitter id="splitter1" oils_persist="state hidden" oils_persist_peers="before_splitter1 after_splitter1"><grippy /></splitter>
-                       <vbox flex="1" id="after_splitter1" oils_persist="width">
-                               <vbox id="siss_editor_middle_pane"/>
-                       </vbox>
-                       <splitter id="splitter2" oils_persist="state hidden" oils_persist_peers="after_splitter1 after_splitter2"><grippy /></splitter>
-                       <vbox flex="1" id="after_splitter2" oils_persist="width">
-                               <vbox id="siss_editor_right_pane"/>
-                       </vbox>
-               </hbox>
-
-               <hbox id="siss_editor_nav">
-                       <spacer flex="1"/>
-                       <button id="siss_save" label="&staff.serial.siss_editor.modify.label;" hidden="true" accesskey="&staff.cat.copy_editor.save.accesskey;" oncommand="g.manage_subs.siss_editor.save()" />
-                       <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
-               </hbox>
-
-               <spacer/>
+               <iframe flex="1" id="alt_siss_editor" name="alt_siss_editor"/>
        </vbox>
 
 </overlay>