[ 
https://issues.apache.org/jira/browse/CB-14168?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Uday Kiran updated CB-14168:
----------------------------
    Environment: Cordova CLI, ios  (was: Cordova CLI)
         Labels: ios  (was: )

> edit-config support for iOS plist
> ---------------------------------
>
>                 Key: CB-14168
>                 URL: https://issues.apache.org/jira/browse/CB-14168
>             Project: Apache Cordova
>          Issue Type: Improvement
>          Components: cordova-cli, cordova-common
>    Affects Versions: [email protected]
>         Environment: Cordova CLI, ios
>            Reporter: Uday Kiran
>            Priority: Major
>              Labels: ios
>
> I have added following edit-config to my config.xml:
>  
> {code:java}
> <edit-config file="*-Info.plist" mode="overwrite" 
> target="UISupportedInterfaceOrientations">
> <array>
> <string>UIInterfaceOrientationPortrait</string>
> <string>UIInterfaceOrientationPortraitUpsideDown</string>
> </array>
> </edit-config>
> <edit-config file="*-Info.plist" mode="overwrite" 
> target="UISupportedInterfaceOrientations~ipad">
> <array>
> <string>UIInterfaceOrientationLandscapeLeft</string>
> <string>UIInterfaceOrientationLandscapeRight</string>
> </array>
> </edit-config>
> {code}
> But, the ionic cordova prepare throws exception doc.find is not a function. I 
> have made the following change to utils 
> files(/usr/local/lib/node_modules/cordova/node_modules/cordova-common/src/util)
>  in my local to fix this issue.
>  
>  
>  
> {code:java}
> // File ConfigFile.js
> ConfigFile.prototype.graft_child = function ConfigFile_graft_child (selector, 
> xml_child) {
> var self = this;
> var filepath = self.filepath;
> var result;
> if (self.type === 'xml') {
> var xml_to_graft = [modules.et.XML(xml_child.xml)];
> switch (xml_child.mode) {
> case 'merge':
> result = modules.xml_helpers.graftXMLMerge(self.data, xml_to_graft, selector, 
> xml_child);
> break;
> case 'overwrite':
> result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, 
> selector, xml_child);
> break;
> case 'remove':
> result = modules.xml_helpers.pruneXMLRemove(self.data, selector, 
> xml_to_graft);
> break;
> default:
> result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, 
> xml_child.after);
> }
> if (!result) {
> throw new Error('Unable to graft xml at selector "' + selector + '" from "' + 
> filepath + '" during config install');
> }
> } else {
> // plist file. Passed mode from here
> result = modules.plist_helpers.graftPLIST(self.data, xml_child.xml, selector, 
> xml_child.mode);
> if (!result) {
> throw new Error('Unable to graft plist "' + filepath + '" during config 
> install');
> }
> }
> self.is_changed = true;
> };
> {code}
>  
>  
> {code:java}
> // File: xml-helper.js
> resolveParent: function (doc, selector) {
> var parent, tagName, subSelector;
> // handle absolute selector (which elementtree doesn't like)
> if (ROOT.test(selector)) {
> tagName = selector.match(ROOT)[1];
> // test for wildcard "any-tag" root selector
> if (tagName === '*' || tagName === doc._root.tag) {
> parent = doc._root;
> // could be an absolute path, but not selecting the root
> if (ABSOLUTE.test(selector)) {
> subSelector = selector.match(ABSOLUTE)[2];
> parent = parent.find(subSelector);
> }
> } else {
> return false;
> }
> } else {
> // here is the issue for exception "doc.finf is not a function"
> parent = Array.isArray(doc) ? doc.find(selector) : doc[selector];
> }
> return parent;
> }
> {code}
>  
>  
> {code:java}
> // File: plist-helper.js
> function graftPLIST (doc, xml, selector, mode) {
> var obj = plist.parse('<plist>' + xml + '</plist>');
> var node = doc[selector];
> if (node && Array.isArray(node) && Array.isArray(obj)) {
> // node = node.concat(obj);
> // addressed overwrite mode here
> (mode == 'overwrite') ? (node = obj) : (node = node.concat(obj));
> for (var i = 0; i < node.length; i++) {
> for (var j = i + 1; j < node.length; ++j) {
> if (nodeEqual(node[i], node[j])) { node.splice(j--, 1); }
> }
> }
> doc[selector] = node;
> } else {
> // plist uses objects for <dict>. If we have two dicts we merge them instead 
> of
> // overriding the old one. See CB-6472
> if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && 
> !__.isDate(obj)) { // arrays checked above
> __.extend(obj, node);
> }
> doc[selector] = obj;
> }
> return true;
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to